2016-04-05 8 views
0

1桁(10月より前のもの)しかない月を先頭に追加しようとしています。ここに私のコードだ:SQL Serverは、1桁の先頭に0を加算します。

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が追加されないのは、CASEの式の結果がINTに変換されたためです。 CASE式を使用する場合、すべての結果のデータ型が同じでない場合は、より高い値のdata type precedence(この場合はINT)に変換されます。別の解決策は、RIGHTを使用してパッドに結果である

CASE 
    WHEN LEN(monCommDt) = 1 
     THEN CONCAT('0', CAST(monCommDt AS VARCHAR(2))) 
    ELSE 
     CAST(monCommDt AS VARCHAR(2)) 
END lzCommDt 

:あなたは、所望の結果を達成するためにVARCHARにあなたの結果をCASTすべき

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

Right関数を使用します。

select Right('0' + cast(month(CommitDate) as varchar), 2) monCommDt 
     , year(CommitDate) yrCommDt 
from myTable 
関連する問題