CASE语句

时间:2015-05-27 10:38:32

标签: sql-server tsql case-when

这个选择让我发疯 错误是:

  

转换错误将nvarchar值'17 .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 

1 个答案:

答案 0 :(得分: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