SQL Время на текст - PullRequest
       2

SQL Время на текст

0 голосов
/ 14 июля 2020

Если date = '1900-01-01', как мне написать оператор CASE, чтобы результат возвращал 'Enroute'?

,case 
   when (cast(Arrival_TS as date)) = '1900-01-01' then cast('Enroute' as text) 
   else cast(Arrival_TS as date) 
 end ArrivalDate

Ошибка:

Msg 206, Уровень 16, состояние 2, строка 11 Тип операнда cla sh: текст несовместим с датой

Ответы [ 2 ]

1 голос
/ 14 июля 2020

Выражение case возвращает только один тип. Если вы хотите 'Enroute' в качестве значения, типом должна быть строка. Итак:

(case when (cast(Arrival_TS as date)) = '1900-01-01'
      then 'Enroute'
      else convert(varchar(255), Arrival_TS, 23)
 end) as ArrivalDate

Вы можете выбрать подходящий формат для convert(). Здесь используется мой предпочтительный формат ГГГГ-ММ-ДД.

0 голосов
/ 14 июля 2020

Вы также можете использовать SQL_VARIANT, как показано ниже:

SELECT CASE
           WHEN(CAST(@Arrival_TS AS DATE)) = '1900-01-01'
           THEN CAST('Enroute' AS SQL_VARIANT)
           ELSE CAST(@Arrival_TS AS DATE)
       END ArrivalDate;

Пожалуйста, проверьте db <> fiddle здесь .

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