在当前表中,我有一个以ddmmyyyy格式保存日期字段的列,它的类型为varchar(8)。该列也有一些字符串值。我想创建一个计算列,如果源列中的值是有效的日期时间,它将以DateTime格式保存值。
答案 0 :(得分:0)
假设您的varchar(8)列为dateString
:
Cast([dateString] as datetime)
答案 1 :(得分:0)
在尝试演员之前尝试将你的varchar解析为dd / mm / yyyy:
cast(substring([datestring],1,2) + '/' +
substring([datestring],3,2) + '/' +
substring([datestring],5,4) as datetime)
答案 2 :(得分:0)
SQL Server更喜欢yyyymmdd格式的日期,因此会有一些字符串操作来格式化您的数据。我们还应该使用IsDate函数来确保我们有一个有效的日期。
所以:
Cast(Case When IsDate(Right(@Data, 4)
+ SubString(@Data, 3, 2)
+ Left(@Data, 2)) = 1
Then Right(@Data, 4)
+ SubString(@Data, 3, 2)
+ Left(@Data, 2) End As DateTime)
请注意,此代码应正确处理varchar列中包含的无效日期。如果日期无效,则此代码将返回NULL。