SQL Server将前导零添加到个位数月份

scr*_*Owl 2 sql sql-server concatenation

我试图将前导零添加到只有一个数字(十月之前的所有数字)的月份。这是我的代码:

with tab1 as (
    select month(CommitDate) monCommDt
            , year(CommitDate) yrCommDt
    from myTable

)

select CASE WHEN LEN(monCommDt) = 1
            THEN CONCAT('0', monCommDt)
            ELSE monCommDt
            END lzCommDt
        , yrCommDt
        , LEN(monCommDt) lenCommDt
from tab1
Run Code Online (Sandbox Code Playgroud)

这是输出:

lzCommDt    yrCommDt    lenCommDt
7   2013    1
7   2013    1
7   2013    1
7   2013    1
Run Code Online (Sandbox Code Playgroud)

知道为什么不添加前导0吗?

Fel*_*tan 6

之所以不添加前导0,是因为CASE表达式的结果被转换回INT。请记住,使用CASE表达式时,如果所有结果的数据类型都不相同,则会将它们转换为优先级更高的数据类型,在这种情况下为an INT。您应该使CAST结果VARCHAR达到期望的结果:

CASE 
    WHEN LEN(monCommDt) = 1
        THEN CONCAT('0', CAST(monCommDt AS VARCHAR(2)))
    ELSE 
        CAST(monCommDt AS VARCHAR(2))
END lzCommDt
Run Code Online (Sandbox Code Playgroud)

另一种解决方案是使用RIGHT以下命令填充结果:

SELECT RIGHT('0' + CAST(monCommDt AS VARCHAR(2)), 2)
Run Code Online (Sandbox Code Playgroud)


FLI*_*KER 5

使用正确的功能:

select Right('0' + cast(month(CommitDate) as varchar), 2) monCommDt
      , year(CommitDate) yrCommDt
from myTable
Run Code Online (Sandbox Code Playgroud)