我正试图从日期中提取月份编号,作为一个带有0的左填充字符串。
例如,从'2018-01-31'
,我想要字符串'01'
。
目前我有这个:
SELECT RIGHT('0' + CAST(MONTH('2018-01-31') AS CHAR(2)), 2)
它正在返回'1'
,但我本希望它返回'01'
,因为我已经将第二个参数作为2
提供给RIGHT
。
有人能解释一下为什么我认为它不起作用吗?
您需要将CHAR
更改为VARCHAR
:
SELECT RIGHT('0' + CAST(MONTH('2018-01-31') AS VARCHAR(2)), 2)
db<>小提琴演示
CHAR(2)
是空白填充的,所以你得到的RIGHT('01 ',2)
就是'1 '
。
当您第一次将字符串强制转换为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)))