CASE语句中的TSQL NVARCHAR转换错误

Jos*_*cid 6 t-sql sql-server 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
Run Code Online (Sandbox Code Playgroud)

声明是:

CASE WHEN  dbo.Activitat.DataInici is null 
THEN DATEPART(DAY,Activitat.Datafi) 
ELSE CONVERT(NVARCHAR(50), dbo.Activitat.DataManual)
END 
Run Code Online (Sandbox Code Playgroud)

ugh*_*hai 7

由于隐式转换,您收到此错误.CASE返回的一部分NVARCHAR(50)CONVERT(NVARCHAR(50), dbo.Activitat.DataManual)无法转换为a int而另一部分返回intie DATEPART(DAY,Activitat.Datafi).

像这样的东西也会返回相同的错误.

SELECT CASE WHEN 1=2 THEN 1 ELSE 'errorstring' END
Run Code Online (Sandbox Code Playgroud)

您应该在两种情况下都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 
Run Code Online (Sandbox Code Playgroud)

  • 很棒的.甚至没有想到它. (2认同)