其他声明无法正常工作时的SQL Server CASE

星期一早上

我在为以下案例声明为什么不起作用而苦苦挣扎。

我想做的是将一个月(从“死亡日期”)转换为两个字符,这样一月变成01,二月变成02,十月到十二月仍然是两个字符的长度

但是,代码似乎让我很沮丧

SELECT  
    LEN(MONT(RAW.dbo.ONS_Death_DOD201516FYQ1.DATE_OF_DEATH)) AS length_of_month,
    (CASE
        WHEN LEN(MONTH(CAST(RAW.dbo.ONS_Death_DOD201516FYQ1.DATE_OF_DEATH as VARCHAR(20)))) = 1
           THEN CONCAT('0', MONTH(RAW.dbo.ONS_Death_DOD201516FYQ1.DATE_OF_DEATH))
     END) AS DERIVED_MOD
FROM    
    RAW.dbo.ONS_Death_DOD201516FYQ1

上面的工作并将1位数字转换为2,但是当我尝试实现下面的第二个选项时,它似乎不起作用。

SELECT  
    LEN(MONTH(ONS.DATE_OF_DEATH)) as length_of_month,
    (CASE
        WHEN LEN(MONTH(CAST(RAW.dbo.ONS_Death_DOD201516FYQ1.DATE_OF_DEATH as VARCHAR(20)))) = 2
            THEN MONTH(RAW.dbo.ONS_Death_DOD201516FYQ1.DATE_OF_DEATH)
        WHEN LEN(MONTH(CAST(RAW.dbo.ONS_Death_DOD201516FYQ1.DATE_OF_DEATH as VARCHAR(20)))) = 1
            THEN CONCAT('0', MONTH(RAW.dbo.ONS_Death_DOD201516FYQ1.DATE_OF_DEATH))
    END) AS DERIVED_MOD
FROM    
    RAW.dbo.ONS_Death_DOD201516FYQ1

任何帮助深表感谢。

亭子

要获得两位数的月份,只需用零填充,如下所示:

RIGHT('0' + RTRIM(MONTH(RAW.dbo.ONS_Death_DOD201516FYQ1.DATE_OF_DEATH)), 2)

不需要CASE WHEN

RTRIM只是那里的月份数转换为字符串。

如果您的版本是SQL Server 2012或更高版本,则可以使用以下更短的方法format

FORMAT(RAW.dbo.ONS_Death_DOD201516FYQ1.DATE_OF_DEATH, 'MM') 

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章