我正在尝试为只有一个数字的月份(十月之前的所有月份)添加一个前导零。这是我的代码:
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
。您应该将结果CAST
为VARCHAR
以获得所需的结果:
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/