如果原点中有不同的日期格式,您可以做些什么?
我有一个案例,我们使用to_date
函数从表中获取信息,但我收到错误,因为某些记录的日期格式为YYYY-DD-MM
而不是{{ 1}}
如何为此应用统一的解决方案?
答案 0 :(得分:2)
要处理这种情况(任意文本应转换为结构化日期值),我可能会使用正则表达式。
通过这种方式,您可以选择符合您希望支持的格式的记录集,并对这些记录执行类型转换。
例如:
create column table date_vals (dateval nvarchar (4000), date_val date)
insert into date_vals values ('2018-01-23', NULL);
insert into date_vals values ('12/23/2016', NULL);
select dateval, to_date(dateval, 'YYYY-MM-DD') as SQL_DATE
from date_vals
where
dateval like_regexpr '[[:digit:]]{4}-[[:digit:]]{2}-[[:digit:]]{2}'
union all
select dateval, to_date(dateval, 'MM/DD/YYYY') as SQL_DATE
from date_vals
where
dateval like_regexpr '[[:digit:]]{2}/[[:digit:]]{2}/[[:digit:]]{4}';
这种方法也提供了一个很好的选择来审查不匹配的记录,并可能提出额外的必要模式。
答案 1 :(得分:0)
为什么不在select中测试不同正则表达式的情况下使用case,然后使用to_date以正确的格式返回日期。
这将避免使用union all和2 select语句。
您可以在其他联盟中添加更多“格式”,而无需更多“选择”。
除非like_regexpr仅适用于where子句(我必须承认我从未尝试过该功能)。