SQL日期格式转换YYYYMMDD

时间:2016-03-08 19:57:30

标签: sql sqldatatypes date-formatting dateadd sql-date-functions

我有一个表,其中许多日期在[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;。我不介意日期的格式,但我需要让我的代码正常工作,以便我可以看到输出中的日期。

1 个答案:

答案 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)