2016-08-15 80 views
-1

我很苦惱爲什麼下面的case語句不起作用。SQL SERVER CASE當ELSE語句不能正常工作

我想要做的是轉換的一個月的日期(「死亡日期」)分成兩個字符,以便月份成爲01月變成02和十月至十二月繼續作爲他們的兩個字符長度

然而,代碼似乎被絆倒我

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 

上述工程和轉換那些有1位至2,但是當我嘗試實施第二個選項下面它似乎並沒有工作。

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 

任何幫助,非常感謝。

+1

Case expression,not case statement ... – jarlh

+1

這似乎是SQL Server。我加了標籤。 – trincot

+0

我會做'案件len(...)2當月(...)當1然後concat(...)結束'保存一些打字。 – jarlh

回答

2

要與零獲得兩位數的月份,只是墊,就像這樣:

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

不需要的CASE WHEN

RTRIM只是在那裏將月份號碼轉換爲字符串。

如果你的版本的SQL Server 2012或更高,甚至有與format較短方式:

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

我想要做的是轉換的一個月「死亡日期」的日期( )分爲兩個字符 使一月變成01, 月02變得和十月至十二月繼續作爲他們的兩個字符長度

從您的日期時間field..works更換@dt 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)