Ошибка преобразования при преобразовании значения varchar 'что-то' в тип данных int - PullRequest
0 голосов
/ 27 сентября 2019

У меня есть следующий код:

,iif(([CreatedDateTime] IS NOT NULL 
AND 
migrationdatetime IS NOT NULL), datediff(day,[CreatedDateTime],[MigrationDateTime]),'not moved to prd') 

и, в принципе, если любая из этих дат пуста, я хочу отобразить текст.есть ли причина, по которой я получаю эту ошибку: «Преобразование завершилось неудачно при преобразовании значения varchar« что-то »в тип данных int».Ценю вашу помощь

Ответы [ 2 ]

3 голосов
/ 27 сентября 2019

Выражение является выражением является выражением.И - как и цвета многих роз - имеет только один тип.Это не может быть как строка, так и дата.

По правилам приоритета типа SQL , когда выбирается строка и число, номер является доминирующим типом;поэтому строка преобразуется в число.И вы получите ошибку преобразования.

Итак, используйте CONVERT(), CAST() или FORMAT():

(CASE WHEN CreatedDateTime IS NOT NULL AND migrationdatetime IS NOT NULL
      THEN CAST(VARCHAR(255), DATEDIFF(DAY, CreatedDateTime, MigrationDateTime))
      ELSE 'not moved to prd'
 END)

Конечно, учитывая правила NULL s в SQLэто проще записать как:

      COALESCE(CAST(VARCHAR(255), DATEDIFF(DAY, CreatedDateTime, MigrationDateTime)),
               'not moved to prd'
              )
0 голосов
/ 28 сентября 2019

Я использовал то же самое, но оно отлично работает

DECLARE @CreatedDateTime Varchar(30) = getdate(), @migrationdatetime  Varchar(30) = dateAdd(MM,2,getdate())

Select iif((@CreatedDateTime IS NOT NULL AND @migrationdatetime IS NOT NULL), datediff(day,@CreatedDateTime,@MigrationDateTime),'not moved to prd') 

Я думаю, что формат даты в varchar не правильный.вам нужно заглянуть в запись

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...