0

我有一个表,其中许多日期在 [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 个字符,所以它看起来像“2012-12-”而不是“20121205”。我不介意日期的格式,但我需要让我的代码正常工作,以便我可以看到输出中的日期。

4

1 回答 1

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)
于 2016-03-08T20:11:45.373 回答