Установите дату 31.12. автоматически с SQL

У меня есть следующая DATES_TABLE (id, start_date, duration_period). Мне нужно удалить период продолжительности и указать дату окончания в качестве поля.

Я использую следующий сценарий для обновления даты окончания:

alter table DATES_TABLE add END_DATE date;

update DATES_TABLE
SET END_DATE = add_months (START_DATE, DURATION_PERIOD * 12);

Если дата начала была 01.01.2018, а продолжительность прогноза - 10, то дата окончания будет установлена ​​на 01.01.2028. Это правильно, но дату окончания необходимо установить на последний день года, то есть 31.12.2028. Во всех случаях год должен измениться, но день должен быть 31, а месяц декабрем.

Как я могу это сделать в sql?

Спасибо.

Я не понимаю правил, которые вы используете. Что будет, если вы прибавите 9 месяцев? Что, если дата начала - 2 января? 30 янв?

Gordon Linoff 30.05.2018 13:03

См. end_date как не включенный в период (период всегда> = start_date и <end_date). В любом случае это правильный способ - полностью включить последний день независимо от того, насколько точное время (секунды, миллисекунды, наносекунды, не имеет значения).

sticky bit 30.05.2018 13:06
ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
0
2
77
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Ответ принят как подходящий
update DATES_TABLE
   SET END_DATE =
       trunc(
           add_months(
               add_months (START_DATE, DURATION_PERIOD * 12),
               12),
           'YYYY')
        - 1;

Следите за этой датой, в том же году после 31/12 / NNNN 00:00:00 остался целый день. Если вы хотите учесть это, просто вычтите одну секунду iso. один день.

Как заметил Эльер, я все еще тратил там несколько циклов процессора.

update DATES_TABLE
   SET END_DATE =
       trunc(
           add_months (START_DATE, (DURATION_PERIOD + 1) * 12),
           'YYYY')
        - 1;

Если я хорошо понимаю, вам может понадобиться что-то вроде следующего:

update dates_table
set end_date = to_date('31-12-' || extract(year from add_months(start_date, duration_period *12)), 'dd-mm-yyyy') 

Попробуйте оба и рассчитайте время.

Gerard H. Pille 30.05.2018 13:10

попробуй это :

update testdate
SET END_DATE = add_months (trunc(START_DATE,'y'),12)-1;

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