CASE 语句中的 TSQL NVARCHAR 转换错误

TSQL NVARCHAR Conversion Error inside CASE statement

这个select快把我逼疯了。
错误是:

Conversion error converting nvarchar value '17.30 h' to int data type.

数据为:

(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 

由于隐式转换,您收到此错误。 CASE returns NVARCHAR(50) 的一部分,即 CONVERT(NVARCHAR(50), dbo.Activitat.DataManual) 无法转换为 int,另一部分 returns 为 intDATEPART(DAY,Activitat.Datafi).

这样的事情也会return同样的错误。

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

你应该在这两种情况下 CONVERT 和 return 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