Как округлить дату до ближайшего месяца, а затем добавить один месяц в sql lite?

#sql #sqlite

#sql #sqlite

Вопрос:

Я хотел бы добавить месяц к данным, которые я округлил до последнего месяца.

В postgresql это просто с кодом, который выглядит как с

 with month as 
(select '2020-01-15' as n_month)

select
   date_trunc('month', n_month) as floored_month,
   dateadd('month', 1, date_trunc('month', n_month)) as floored_month_plus_one
from month
  

Я хотел бы получить ту же таблицу с помощью sql lite

Пока это мой код

 with month as 
(select '2020-01-15' as n_month)

select 
     strftime('%Y-%m', n_month) as floored_month,
     date(strftime('%Y-%m', n_month), ' 1 months') as floored_month_plus_one
from month 
  

Но, к сожалению, это выдает ошибку

Ответ №1:

Нет необходимости в конкатенациях.
Вы можете сделать это с помощью функции date() и модификаторов 'start of month' и ' 1 month' :

 with month as (select '2020-01-15' as n_month)
select date(n_month,  'start of month') as floored_month,
       date(n_month,  'start of month', ' 1 month') as floored_month_plus_one
from month
  

Смотрите демонстрацию.
Результаты:

 > floored_month | floored_month_plus_one
> :------------ | :---------------------
> 2020-01-01    | 2020-02-01            
  

Ответ №2:

Для этого вам нужен компонент day, который будет следовать вашему методу. Итак:

 with month as (
      select '2020-01-15' as n_month
     )
select strftime('%Y-%m', n_month) as floored_month,
       date(strftime('%Y-%m', n_month) || '-01', ' 1 months') as floored_month_plus_one
from month 
  

Комментарии:

1. Другой способ — использовать ` strftime(‘%Y-%m-%d’, n_month, ‘начало месяца’)`, а затем использовать dateadd для этого значения