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吗?
之所以不添加前导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)
使用正确的功能:
select Right('0' + cast(month(CommitDate) as varchar), 2) monCommDt
, year(CommitDate) yrCommDt
from myTable
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6510 次 |
| 最近记录: |