代码之家  ›  专栏  ›  技术社区  ›  t_warsop

SQL Right函数未按预期工作

  •  1
  • t_warsop  · 技术社区  · 7 年前

    我正试图从日期中提取月份号,作为带有0的左填充字符串。

    例如,从 '2018-01-31' 我想要细绳 '01' .

    目前我有:

    SELECT RIGHT('0' + CAST(MONTH('2018-01-31') AS CHAR(2)), 2)
    

    哪个回来了 '1' 但我本以为它会回来的 “01” 因为我提供了第二个论点 RIGHT 作为 2 .

    有人能解释一下为什么我认为这不管用吗?

    2 回复  |  直到 7 年前
        1
  •  4
  •   Lukasz Szozda    7 年前

    你需要改变 CHAR 到 VARCHAR :

    SELECT RIGHT('0' + CAST(MONTH('2018-01-31') AS VARCHAR(2)), 2)
    

    db<>fiddle demo

    CHAR(2) 是空白填充,所以你得到 RIGHT('01 ',2) 哪个是 '1 ' .

        2
  •  0
  •   LukStorms    7 年前

    你可以使用 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)))