Sql server 2005 计算列

Sql server 2005 计算列,sql-server-2005,Sql Server 2005,在当前表中,我有一列保存ddmmyyyy格式的日期字段,它的类型是varchar(8)。该列也有一些字符串值。如果源列中的值是有效的日期时间,我想创建一个以日期时间格式保存值的计算列。假设您的varchar(8)列是dateString: Cast([dateString] as datetime) 尝试转换之前,请尝试将varchar解析为dd/mm/yyyy: cast(substring([datestring],1,2) + '/' + substring([datestring],

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

假设您的varchar(8)列是
dateString

Cast([dateString] as datetime)

尝试转换之前,请尝试将varchar解析为dd/mm/yyyy:

cast(substring([datestring],1,2) + '/' + 
substring([datestring],3,2) + '/' + 
substring([datestring],5,4) as datetime)

SQL Server更喜欢使用yyyymmdd格式的日期,因此需要进行一些字符串操作来格式化数据。我们还应该使用IsDate函数来确保我们有一个有效的日期

因此:


请注意,此代码应该正确处理varchar列中包含的无效日期。如果日期无效,此代码将返回NULL。

将varchar数据类型转换为datetime数据类型会导致值超出范围。尝试选择Cast('01011900'作为日期时间)作为myDate。下面将使用Select Cast('19000101'作为datetime)作为myDate。我认为没有办法在计算列表达式中执行TRY CATCH。你必须做一些数据清理。这个问题有一个SQL2005标记。日期数据类型已添加到SQL2008中。友好建议:下面的所有答案都无法解决日期格式问题
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)