我有一个表,其中许多日期在[DATE_READ]列中存储为Decimal(9,0)类型。我需要在这些条目上使用DATEADD,所以我使用以下代码将它们转换为varchar然后转换为日期:
CASE WHEN A.[DATE_READ] <> 0 AND LEN(A.[DATE_READ]) = 6
THEN dateadd(day,1,CONVERT(date, '20' + CONVERT(varchar(8), A.[DATE_READ]), 112))
WHEN LEN(A.[DATE_READ]) = 8
THEN dateadd(day,1,CONVERT(date, CONVERT(varchar(10), A.[DATE_READ]), 112))
我的问题是只显示日期,好像我在DATEADD函数中使用了110而不是112,只显示了前8个字符,所以它看起来像是&#39; 2012-12 - &#39;而不是&#39; 20121205&#39;。我不介意日期的格式,但我需要让我的代码正常工作,以便我可以看到输出中的日期。
答案 0 :(得分:0)
您错过了最终转换为112.由于DATEADD
返回日期,您需要格式化该日期以进行输出。
CONVERT(VARCHAR(8),
CASE
WHEN A.[DATE_READ] <> 0 AND LEN(A.[DATE_READ]) = 6
THEN dateadd(day,1,CONVERT(date, '20' + CONVERT(varchar(8), A.[DATE_READ]), 112))
WHEN LEN(A.[DATE_READ]) = 8
THEN dateadd(day,1,CONVERT(date, CONVERT(varchar(10), A.[DATE_READ]), 112)) END,
112)