#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 для этого значения