我正在使用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
答案 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
只需将硬编码搜索替换为您的实际数据表