SQL Server将前导零加到单个数字月

时间:2016-04-05 23:16:23

标签: sql sql-server concatenation

我试图将前导零添加到只有一位数的月份(10月之前的所有内容)。这是我的代码:

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 个答案:

答案 0 :(得分:4)

未添加前导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) 填充结果:

.download()

答案 1 :(得分:2)

使用右功能:

db:
  image: mysql
web:
  build: .
  command: bundle exec rails s -p 3000 -b '0.0.0.0'
  volumes:
    - .:/myapp
  ports:
    - "3000:3000"
  links:
    - db:db
  environment:
    RAILS_ENV: development