计算列

时间:2010-11-03 14:34:22

标签: sql-server-2005

在当前表中,我有一个以ddmmyyyy格式保存日期字段的列,它的类型为varchar(8)。该列也有一些字符串值。我想创建一个计算列,如果源列中的值是有效的日期时间,它将以DateTime格式保存值。

3 个答案:

答案 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。