Ошибка преобразования TSQL NVARCHAR внутри оператора CASE

этот выбор сводит меня с ума.
Ошибка:

ошибка преобразования преобразование значения 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 ответов


вы получаете эту ошибку из-за неявного преобразования. Одна часть 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