分析迄今为止不同类型的值



我正在尝试将某些列解析为日期格式,并取得了成功,但由于数据不一致,我遇到了错误。

我的日期列目前是YYYYMMDD形式的整数,所以我在select语句中使用了以下内容来解析日期:

CONVERT(datetime, CAST(date_column AS CHAR(8)), 112)

这可以按预期工作,将我的数据转换为YYYY-MM-DD格式。

不过,我遇到了以下错误:

从字符转换日期和/或时间时转换失败一串

仔细查看数据后,发现我有一些数据值不一致的情况,例如-1和10630,而不是预期的YYYYMMDD值。

我是否只需要添加一个WHERE语句来仅将CONVERTCAST应用于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'))

相关内容

  • 没有找到相关文章

最新更新