SQL Server如何在单个数字月份前添加前导零

3
我正在尝试在只有一个数字的月份(十月之前的所有月份)前添加前导零。这是我的代码:
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

以下是输出结果:

lzCommDt    yrCommDt    lenCommDt
7   2013    1
7   2013    1
7   2013    1
7   2013    1

有什么想法为什么前导0没有被添加?
2个回答

8
不添加前导0的原因是因为您的CASE表达式的结果会被转换回INT。请记住,使用CASE表达式时,如果所有结果的数据类型不相同,则它们将转换为具有更高数据类型优先级的类型,本例中为INT。您应该将结果CASTVARCHAR以实现所需的结果:
CASE 
    WHEN LEN(monCommDt) = 1
        THEN CONCAT('0', CAST(monCommDt AS VARCHAR(2)))
    ELSE 
        CAST(monCommDt AS VARCHAR(2))
END lzCommDt

另一种解决方案是使用 RIGHT 进行填充结果:

SELECT RIGHT('0' + CAST(monCommDt AS VARCHAR(2)), 2)

5

使用 Right 函数:

select Right('0' + cast(month(CommitDate) as varchar), 2) monCommDt
      , year(CommitDate) yrCommDt
from myTable

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接