我正在努力解决为什么以下案例陈述不起作用。
我想要做的是将月份从日期(&#34;死亡日期&#34;)转换为两个字符,以便1月变为01,2月变为02,10月到12月保持为两个字符长度< / p>
然而,代码似乎在困扰我
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
非常感谢任何帮助。
答案 0 :(得分:2)
要获得两位数的月份,只需填零,如下所示:
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')
答案 1 :(得分:0)
我想要做的是将月份从日期(&#34;死亡日期&#34;)转换为两个字符 所以1月变成01, 2月变为02,10月到12月仍然是两个字符长度
将@dt替换为您的日期时间字段..来自SQLserver 2005
Declare @dt datetime
set @dt='20160901'
select
case when month(@dt)>=10 then cast( month(@dt) as varchar(2))
else cast(0 as varchar(2))+cast(month(@dt) as varchar(2))
end
,month(@dt)