2015-05-27 65 views
6

這個選擇讓我發瘋。
錯誤是:CASE語句中的TSQL NVARCHAR轉換錯誤

轉換誤差變換爲nvarchar值'17 0.30 H」爲int數據類型。

數據是:

(DateTime) (Nvarchar) (DateTime) 
DATAINICI DATAMANUAL DATAFI 
null   17.30 h  10/01/2015 
01/01/2015 20.30 h  null 

而且語句是:

CASE WHEN dbo.Activitat.DataInici is null 
THEN DATEPART(DAY,Activitat.Datafi) 
ELSE CONVERT(NVARCHAR(50), dbo.Activitat.DataManual) 
END 
+3

在哪裏鑄造爲int? –

+2

你能展示整個表述嗎?你確定它在那裏失敗了嗎?試着評論這一部分,你還會得到同樣的錯誤嗎? –

回答

7

你是因爲隱式轉換得到這個錯誤。 CASE的一部分返回NVARCHAR(50),即CONVERT(NVARCHAR(50), dbo.Activitat.DataManual),其不能轉換爲int,另一部分返回int,即DATEPART(DAY,Activitat.Datafi)

像這樣的東西也會返回相同的錯誤。

SELECT CASE WHEN 1=2 THEN 1 ELSE 'errorstring' END 

您應該CONVERT並在這兩種情況下返回NVARCHAR(50)所以不存在隱式轉換。像這樣的東西。

CASE WHEN dbo.Activitat.DataInici is null 
THEN CONVERT(NVARCHAR(50),DATEPART(DAY,Activitat.Datafi)) 
ELSE CONVERT(NVARCHAR(50), dbo.Activitat.DataManual) 
END 
+2

很棒。甚至沒有想到它。 –

+0

@Josep Alacid - 如果這解決了您的問題,請將其標記爲已接受的答案。 – ughai

+0

對不起,延遲ughai(月,我知道)。 但終於完成了! –