我需要将所有月份转换为2位数字,如下所示:
1,2,3,4,5,6,7,8,9,10,11,12
Run Code Online (Sandbox Code Playgroud)
对此:
01,02,03,04,05,06,07,08,09,10,11,12
Run Code Online (Sandbox Code Playgroud)
所以我把一个简单的CASE语句放在一起检查月份的长度值是否为1,然后添加一个前导零,否则保持原样:
SELECT
CASE
WHEN LEN(MONTH(GETDATE())) = 1
THEN RIGHT('0' + CONVERT(VARCHAR(2), MONTH(GETDATE())), 2)
ELSE MONTH(GETDATE())
END
Run Code Online (Sandbox Code Playgroud)
我们在四月,这次行动的结果是'4',而不是'04'.检查语句时(没有条件语句):
right('0' + convert(varchar(2),month(getdate())),2)
Run Code Online (Sandbox Code Playgroud)
然后我得到正确的答案('04')....
这让我大吃一惊..我已经在这一整天了,我无法弄清楚为什么代码单独工作,但是在CASE语句中包含失败.
请帮忙!
因为case语句必须返回相同的数据类型,而else是默认的INT.这是优先顺序.在这里,您将获得隐式转换.施放ELSE会解决这个问题.
,CASE
WHEN len(month(getdate())) = 1
THEN right('0' + convert(varchar(2),month(getdate())),2)
ELSE
cast(month(getdate()) as varchar(2)) END
Run Code Online (Sandbox Code Playgroud)