我正在尝试做这样的事情
when ISDATE(u.NewValue)=1 then CONVERT(varchar,cast(u.NewValue as date),23)
但是sql server也为2406
返回1,因为它也是一个日期,所以这是
select ISDATE('2406')
返回1。
情况并非如此。
因此,我得到像这样的2406-01-01
输出,这是错误的。
应该如何检查该值是否实际上是日期,当我的数据将是日期时,它将以2019-05-28 07:59:04.450
格式出现,因此我只想捕获这种类型的数据作为日期。
有人可以建议我这样做的方法
答案 0 :(得分:2)
好吧,您可以使用like
:
select (case when col like '[0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9] [0-9][0-9]:[0-9][0-9]:[0-9][0-9].[0-9][0-9][0-9]'
then convert(datetime, col)
end)
根据列的外观,可以放宽格式要求:
select (case when col like '%-%-% %:%:%.%'
then try_convert(datetime, col)
end)
SQL Server仅使用年份将其转换为日期,我感到很惊讶:
try_convert(date, '2019', 121)
格式可能不完整。
答案 1 :(得分:-1)
这项工作会吗?
when ISDATE(convert(date,u.NewValue))=1 then CONVERT(varchar,cast(u.NewValue as date),23)