2016-08-15 5 views
-1

Ich kämpfe mit, warum die folgende Fallanweisung nicht funktioniert.SQL Server CASE WENN ELSE STATEMENT nicht funktioniert, wie sollte

Was ich tun möchte, ist der Monat von einem Tag („Tag des Todes“) in zwei Zeichen zu konvertieren, so dass 1. JANUAR wird, 2. Februar und Oktober bis Dezember wird bleiben, wie ihre beiden Zeichenlängen

jedoch scheint der Code mir

SELECT 
    LEN(MONT(RAW.dbo.ONS_Death_DOD201516FYQ1.DATE_OF_DEATH)) AS length_of_month, 
    (CASE 
     WHEN LEN(MONTH(CAST(RAW.dbo.ONS_Death_DOD201516FYQ1.DATE_OF_DEATH as VARCHAR(20)))) = 1 
      THEN CONCAT('0', MONTH(RAW.dbo.ONS_Death_DOD201516FYQ1.DATE_OF_DEATH)) 
    END) AS DERIVED_MOD 
FROM  
    RAW.dbo.ONS_Death_DOD201516FYQ1 

die oben genannten arbeiten und wandelt jene mit 1 Ziffer 2 werden stumping aber wenn ich versuche, die zweite Option zu implementieren unten es scheint nicht zu funktionieren.

SELECT 
    LEN(MONTH(ONS.DATE_OF_DEATH)) as length_of_month, 
    (CASE 
     WHEN LEN(MONTH(CAST(RAW.dbo.ONS_Death_DOD201516FYQ1.DATE_OF_DEATH as VARCHAR(20)))) = 2 
      THEN MONTH(RAW.dbo.ONS_Death_DOD201516FYQ1.DATE_OF_DEATH) 
     WHEN LEN(MONTH(CAST(RAW.dbo.ONS_Death_DOD201516FYQ1.DATE_OF_DEATH as VARCHAR(20)))) = 1 
      THEN CONCAT('0', MONTH(RAW.dbo.ONS_Death_DOD201516FYQ1.DATE_OF_DEATH)) 
    END) AS DERIVED_MOD 
FROM  
    RAW.dbo.ONS_Death_DOD201516FYQ1 

Jede Hilfe wird sehr geschätzt.

+1

Fall Ausdruck, nicht case-Anweisung ... – jarlh

+1

Dies scheint SQL Server zu sein. Ich habe das Tag hinzugefügt. – trincot

+0

Ich würde 'Fall len (...) wenn 2 dann Monat (...), wenn 1 dann concat (...) enden', um ein wenig Tipparbeit zu speichern. – jarlh

Antwort

2

Um den zweistelligen Monat, nur Pad mit Null, wie diese:

RIGHT('0' + RTRIM(MONTH(RAW.dbo.ONS_Death_DOD201516FYQ1.DATE_OF_DEATH)), 2) 

Keine Notwendigkeit von CASE WHEN.

Die RTRIM ist nur da, um die Monatszahl in eine Zeichenfolge zu konvertieren.

Wenn Ihre Version von SQL Server 2012 oder höher ist, gibt es auch einen kürzeren Weg mit format:

FORMAT(RAW.dbo.ONS_Death_DOD201516FYQ1.DATE_OF_DEATH, 'MM') 
0

Was möchte ich tun, ist der Monat von einem Tag („Datum des Todes“ convert) in zwei Zeichen so dass 1. JANUAR wird, Februar wird 02 und Oktober bis Dezember bleiben, wie ihre beiden Zeichen

Längen ersetzen @dt mit Datumzeit field..works aus SQLserver 2005

Declare @dt datetime 
set @dt='20160901' 
select 
case when month(@dt)>=10 then cast(month(@dt) as varchar(2)) 
    else cast(0 as varchar(2))+cast(month(@dt) as varchar(2)) 
    end 
    ,month(@dt)