большее значение двух разных столбцов, где есть нули - PullRequest
0 голосов
/ 29 июня 2018

Я сравниваю два столбца даты об ошибках, один - исправленные ошибки, а другой - закрытые ошибки. Я хочу больше из двух, но есть нулевые значения (когда ошибка еще не была решена или закрыта). Как взять большее из двух, игнорируя значения NULL? Я видел другие решения, но вы должны указать даты в коде, что я не могу сделать в моем наборе данных как большой. формат даты: мм / дд / гг чч: мм: сс PM / AM

(GREATEST(dtResolved , dtClosed))

Ответы [ 2 ]

0 голосов
/ 29 июня 2018

Вот еще один пример:

GREATEST(COALESCE(UNIX_TIMESTAMP(STR_TO_DATE(dtResolved, '%m/%d/%Y %r')), 0), COALESCE(UNIX_TIMESTAMP(STR_TO_DATE(dtClosed, '%m/%d/%Y %r')), 0))

Этот код даст вам большую дату в метке времени. Причина в том, что функция GREATEST вернет вашу дату в виде строки без пробелов и косых черт между годом, месяцем или датой. Так что отметка времени - это хороший способ предотвратить это.

На всякий случай dtResolved и dtClosed равны null, и вы бы сравнили их, используйте COALESCE с 0 вместо обоих значений. Это предотвратит ваш запрос от сбоев. Он вернет 0.

Как сказал Тим, преобразование строковой даты в объект даты - неплохая идея. Всегда предпочтительно работать с объектом даты для нескольких функций, которые существуют.

0 голосов
/ 29 июня 2018

Как насчет этого:

GREATEST(COALESCE(dtResolved , dtClosed), COALESCE(dtClosed, dtResolved))

Используя эту логику, если обе даты не будут NULL, вы получите большее из двух. Если один будет NULL, то вы получите не NULL дату.

Edit:

формат даты: мм / дд / ггг чч: мм: сс PM / AM

Звучит так, будто вы сохраняете свои даты в виде текста, что всегда плохая идея. Чтобы предложение, приведенное выше, сработало, сначала нужно преобразовать текст в даты:

STR_TO_DATE('02/28/2014 09:30:05 AM', '%m/%d/%Y %r')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...