Условно заменить переменную в расчете - PullRequest
0 голосов
/ 20 мая 2019

У меня есть следующий код, который вычисляет время в минутах между двумя точками времени - «CompleteDataTime» и «RequestedDateTime».

 Select [Financial Number],
 datediff(mi,CompletedDateTime1, RequestedDateTime2) as Prov_to_dispo1
 FROM NewTable
 order by [Financial Number]

В некоторых записях переменная «CompleteDataTime» пуста или отсутствует;и, следовательно, код выдает нулевое значение для этих записей при расчете Prov_to_dispo1.

У меня есть другая переменная в наборе данных «Дата и время отправления», которую я хотел бы использовать в качестве прокси для «CompleteDataTime», когда «CompleteDataTime» отсутствует - возможно ли это?

Я предполагаю, что мне нужно выражение IF-THEN, которое выглядело бы как

IF 'CompleteDataTime' = . THEN Prov_to_dispo1 = datediff(mi,'Depart Date & 
Time', RequestedDateTime2) as Prov_to_dispo1

Требуемый вывод должен выглядеть как

 FIN  Prov_to_dispo1
  1        345
  2        685
  3        148
  4        306
  5        265

Ответы [ 2 ]

1 голос
/ 20 мая 2019

Вы можете использовать функцию ISDATE(). Согласно официальным документам:

Возвращает 1, если выражение является допустимым значением даты, времени или даты и времени; в противном случае, 0

Если вы используете SQL Server 2012 или более позднюю версию, я рекомендую вам использовать функцию IIF() вместо оператора CASE-WHEN. Если вы не знаете, как работает функция IIF(), синтаксис функции IIF() выглядит следующим образом:

IIF ( boolean_expression, true_value, false_value )  

Следовательно, код будет следующим:

SELECT
  [Financial Number],
  DATEDIFF(
    mi,
    IIF(
      ISDATE(CompletedDateTime1) = 1, --boolean_expression
      CompletedDateTime1, -- true_value
      'Depart Date & Time' -- false_value
    ),
    RequestedDateTime2
  ) as Prov_to_dispo1
FROM NewTable
ORDER BY [Financial Number]

Надеюсь, это поможет. Спасибо!

1 голос
/ 20 мая 2019

Это должно сделать это.

Select [Financial Number],
case when isnull(CompletedDateTime1, '') = '' then
    datediff(mi,DepartDateTime, RequestedDateTime2) 
else
    datediff(mi,CompletedDateTime1, RequestedDateTime2)
end as Prov_to_dispo1
FROM NewTable
order by [Financial Number]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...