SQL Ошибка преобразования сервера при использовании IIF в поле даты и времени для вывода строки - PullRequest
0 голосов
/ 05 марта 2020

У меня есть следующий оператор выбора:

SELECT IIF(DateFirstSeen IS NOT NULL, DateFirstSeen, 'Not Seen') as [Date First Seen]

Но когда я запускаю это, я получаю ошибку:

Conversion failed when converting character string to smalldatetime data type

Может ли кто-нибудь помочь с этим?

Ответы [ 2 ]

5 голосов
/ 05 марта 2020

Обе ветви IIF() должны возвращать один и тот же тип данных, пока вы смешиваете дату и строку.

Сначала рассмотрите возможность преобразования даты в строку, например:

 COALESCE(CONVERT(varchar, DateFirstSeen, 23), 'Not Seen')

Обратите внимание, что при работе с null s, COALESCE() сокращает логи c по сравнению с IIF().

2 голосов
/ 05 марта 2020

IIF() возвращает одно значение. Но есть конкурирующие типы. Какой тип использовать? Стандарт SQL подчеркивает, что возвращается наиболее ограничительный тип , а не самый общий.

Для представления 'Not Seen' вам нужна строка. Вы должны использовать convert() или format() с соответствующей спецификацией:

SELECT COALESCE(CONVERT(VARCHAR(255), DateFirstSeen, 120), 'Not Seen')

Или научиться жить и любить NULL s.

...