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

标签 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

这是输出:

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

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

最佳答案

不加前导0的原因是因为你的CASE表达式的结果被转换回了INT。请记住,在使用 CASE 表达式时,如果所有结果的数据类型不同,它们将被转换为具有较高 data type precedence 的类型。 ,在本例中为 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)

关于SQL Server 将前导零添加到一位数月份,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36438715/

相关文章:

SQL Server : dynamic pivot over 5 columns

python - (Python 3.6) 类型错误 : can't concat bytes to tuple

mysql - 在 From 子句中创建子查询以引用存档表

sql - 如何按最近的帖子对用户进行排序?

python manage.py migrate登陆错误

arrays - 如何在 matlab 中连接数组 'n' 时间?

javascript - 在 JavaScript 中将对象字段与变量连接起来

SQL查询,如何从表中获取数据但仅当它被插入到另一个表中时

sql - 如何在Sql中进行聚合

ASP.Net session 状态 SQL Server 用户权限