我正在尝试将某些列解析为日期格式,并取得了成功,但由于数据不一致,我遇到了错误。
我的日期列目前是YYYYMMDD形式的整数,所以我在select
语句中使用了以下内容来解析日期:
CONVERT(datetime, CAST(date_column AS CHAR(8)), 112)
这可以按预期工作,将我的数据转换为YYYY-MM-DD格式。
不过,我遇到了以下错误:
从字符转换日期和/或时间时转换失败一串
仔细查看数据后,发现我有一些数据值不一致的情况,例如-1和10630,而不是预期的YYYYMMDD值。
我是否只需要添加一个WHERE
语句来仅将CONVERT
和CAST
应用于YYYYMMDD字段,同时筛选出包含错误数据的字段?如果是这样,我该怎么做,或者有更好的方法吗?
提前感谢
根据SQL的语法,假设您使用的是SQL Server。实际上你不应该需要112
。'YYYYMMDD'
是SQL Server的默认日期格式。
在任何情况下,您都可以使用TRY_CONVERT()
:
TRY_CONVERT(datetime, CAST(date_column AS CHAR(8)), 112)
如果值无法转换,则返回NULL
。您可以使用找到有问题的值
select date_column
from t
where try_convert(datetime, cast(date_column as char(8)) is null and
date_column is not null;
使用Parse((或Try_pare((
select parse('22-JAN-1989' as date)
select parse('04-March-1992' as date)
select parse('03/10/2020' as date)
select parse('07-05-1958' as date)
select parse('Aug 25,2016' as date)
上面的每个示例都返回一个有效日期。
如果你想要一种不同的文化,你也可以添加USING或类似的词。
如果您正在获取数值,并且您知道开始日期,请使用
select IsNull(try_parse('16500' as date),dateadd(d,cast('16500' as int),'1/1/1980'))