我正在尝试从日期中提取月份号作为带有0的左填充字符串。
例如,从'2018-01-31'
开始,我想要字符串'01'
。
目前我有这个:
SELECT RIGHT('0' + CAST(MONTH('2018-01-31') AS CHAR(2)), 2)
哪个返回'1'
,但我希望它返回'01'
,因为我已经将RIGHT
的第二个参数作为2
提供了。
有人可以解释为什么这不起作用吗?
答案 0 :(得分:4)
您需要将CHAR
更改为VARCHAR
:
SELECT RIGHT('0' + CAST(MONTH('2018-01-31') AS VARCHAR(2)), 2)
https://olegkrivtsov.github.io/using-zend-framework-3-book/html/en/Routing/Regex_Route_Type.html
CHAR(2)
为空白填充,因此您得到RIGHT('01 ',2)
的{{1}}。
答案 1 :(得分:0)
当您第一次将字符串转换为DATE类型时,可以改用FORMAT。
SELECT FORMAT(CAST('2018-01-31' as DATE),'MM')
至于为什么正确的SQL无效?
尝试使用此SQL并注意不同之处(多余的空间):
SELECT quotename('0' + CAST(1 AS CHAR(2))), quotename('0' + CAST(1 AS VARCHAR(2)))