0

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

AbsoluteDates
20051216
20051217
20051218
10000
90
600

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

例如,如果我有与上面相同的数据,从日历中选择 AbosluteDates where 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
4

1 回答 1

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

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

于 2012-07-17T16:55:49.923 回答