у меня есть этот запрос
SELECT
CASE WHEN dbo.CFE_PPHY.P77 IS NOT NULL OR dbo.CFE_PPHY.P77 <>''
THEN MONTH(dbo.CFE_PPHY.P77)
WHEN dbo.CFE_PPHY.P70 IS NOT NULL OR dbo.CFE_PPHY.P70 <>''
THEN MONTH(dbo.CFE_SERVICE_EVTS.C10_2)
ELSE COALESCE(CONVERT(VARCHAR,dbo.CFE_PPHY.P77)+
CONVERT(VARCHAR,dbo.CFE_SERVICE_EVTS.C10_2),'toto') END
AS CFELiasse_DateEffetEIRL_MM_N
FROM CFE_PPHY LEFT JOIN CFE_SERVICE_EVTS ON CFE_PPHY.colA = CFE_SERVICE_EVTS.colB
Часть ELSE
вызывает у меня головную боль.
Столбцы CFE_PPHY.P77
и CFE_SERVICE_EVTS.C10_2
имеют формат даты и времени. Я превращаю их в varchar. Тем не менее, когда я запускаю запрос, у меня есть следующая ошибка
Сообщение 245, уровень 16, состояние 1, строка 1 Преобразование завершилось неудачно при преобразовании значения varchar 'toto' в тип данных int.
Очевидно, я не могу превратить toto
в целое число. Справедливо. Однако, с моей точки зрения, я преобразовал формат даты и времени в формат varchar, поэтому он должен работать.
Где я не прав?
Спасибо
CASE
не поддерживает несколько типов данных, в ваших первых двух условиях вы возвращаетеINT
в формеMONTH(blah)
. Либо преобразуйте это вVARCHAR
, либо не используйте toto. - person Chris Pickford   schedule 03.06.2016