У меня есть запрос от mysql, который работал с таблицей, которую я недавно перенес на DB2.
Запрос теперь не выполняется в DB2 из-за строки ниже, в которой говорится, что DATEDIFF не может быть найден. Я предполагаю только потому, что это недопустимая функция на db2.
Есть ли аналог этого в DB2, который будет поддерживать не только функциональность, но и производительность?
SELECT DISTINCT
LEAST(180, DATEDIFF(curdate(), start_date)) as days
FROM table2
where expire_date > curdate()
У меня есть и я видел TIMESTAMPDIFF, но я не видел, как я могу применить его аналогичным образом для использования функции LEAST. Я использую его для возврата количества дней, если дата находится в пределах 180 дней от сегодняшнего дня, но если больше, то я просто возвращаю 180.
«Развлечение с датами и временем». Может быть, в 2003 году будет весело. Если вы используете Db2 11.1 (то есть Db2 LUW), есть целый набор функций даты. См. Запись «Новые встроенные агрегатные и скалярные функции». здесь ibm.com/support/knowledgecenter/en/SSEPGG_11.1.0/…, в частности 'DAYS_BETWEEN`


Я использую функцию DAYS() для преобразования дат в числовые последовательные числа, а затем просто вычитаю их, как в:
SELECT DISTINCT
LEAST(180, DAYS(curdate()) - DAYS(start_date)) as days
FROM table2
where expire_date > curdate()
Согласно руководству по DB2, DAYS() возвращает: «Результат на 1 больше, чем количество дней с 1 января 0001 года».
В Db2 11.1 (для Linux, Unix и Windows) и выше это будет работать
SELECT DISTINCT
LEAST(180, DAYS_BETWEEN(current_date, start_date)) as days
FROM table2
where expire_date > current_date
Вы даже искали функции даты / времени в DB2? Это может помочь: ibm.com/developerworks/data/library/techarticle/0211yip/…