将InT字段转换为日期时间

时间:2012-07-17 16:51:30

标签: sql-server-2008 datetime select case

我正在使用MSSQL 2008,并且有一个名为AbsoluteDates的字段,其中包含mat数字数据,例如

AbsoluteDates
20051216
20051217
20051218
10000
90
600

我需要做的是一个“选择”语句,它将忽略任何不是8个数字的日期,然后将结果转换为日期时间,因为它应该像一个案例陈述,因为我需要产生一些东西,当长度不是8个charectors,例如单词“NotValid”

所以例如,如果我有与上面相同的数据,从日历中选择AbosluteDates,其中lenth = 9会给我以下结果。

AbsoluteDates
2005-12-16 00:00:00.000
2005-12-17 00:00:00.000
2005-12-18 00:00:00.000
NotValid
NotValid
NotValid

1 个答案:

答案 0 :(得分:0)

您可以将varchar转换为此类日期时间,然后再转换为varchar:

SELECT CASE WHEN LEN(DateNumber) = 8 AND ISDATE(RTRIM(DateNumber)) = 1
    THEN CONVERT(nvarchar(25), 
        CAST(CAST(DateNumber as varchar(10)) as datetime), 121)
    ELSE 'NotValid' 
    END AS Result
FROM (
    SELECT 20051216 AS DateNumber
    UNION SELECT 20051217
    UNION SELECT 20051218
    UNION SELECT 10000
    UNION SELECT 90
    UNION SELECT 600
    UNION SELECT 99421946
) MySubQuery
ORDER BY Result

只需将硬编码搜索替换为您的实际数据表