DATEDIFF в запросе DB2

У меня есть запрос от mysql, который работал с таблицей, которую я недавно перенес на DB2.

Запрос теперь не выполняется в DB2 из-за строки ниже, в которой говорится, что DATEDIFF не может быть найден. Я предполагаю только потому, что это недопустимая функция на db2.

Есть ли аналог этого в DB2, который будет поддерживать не только функциональность, но и производительность?

SELECT DISTINCT
    LEAST(180, DATEDIFF(curdate(), start_date)) as days
FROM table2
where expire_date > curdate()

Вы даже искали функции даты / времени в DB2? Это может помочь: ibm.com/developerworks/data/library/techarticle/0211yip/…

Thorsten Kettner 18.10.2018 15:49

У меня есть и я видел TIMESTAMPDIFF, но я не видел, как я могу применить его аналогичным образом для использования функции LEAST. Я использую его для возврата количества дней, если дата находится в пределах 180 дней от сегодняшнего дня, но если больше, то я просто возвращаю 180.

Geoff_S 18.10.2018 15:52

«Развлечение с датами и временем». Может быть, в 2003 году будет весело. Если вы используете Db2 11.1 (то есть Db2 LUW), есть целый набор функций даты. См. Запись «Новые встроенные агрегатные и скалярные функции». здесь ibm.com/support/knowledgecenter/en/SSEPGG_11.1.0/…, в частности 'DAYS_BETWEEN`

Paul Vernon 18.10.2018 17:12
ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
2
3
22 194
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Я использую функцию 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

Другие вопросы по теме