#sql #oracle #date
Вопрос:
Я хотел бы получить фактический месяц, месяц -1, месяц -2. и текущий месяц, но на 1 год меньше
Например, я сделал это в своем «где» :
where extract(year from date) = 2021 or
extract(month from date) = 06
orextract(month from date) = 07
orextract(month from date) = 08
or (extract(year from date) = 2020 and
and extract(month from date) = 08)
Но я хотел бы знать, как это сделать автоматически, чтобы мне не нужно было меняться самому каждый месяц.
Спасибо
Комментарии:
1. Помогут выборочные данные и ожидаемый результат.
Ответ №1:
Итак, похоже, что вы хотите, чтобы это было в where
предложении для фильтрации строк по дате. (Конечно, «дата» — это зарезервированное ключевое слово, поэтому ваш столбец не может называться «дата»; я буду считать, что он называется date_
с подчеркиванием.)
Вы можете сделать это следующим образом:
where date_ >= add_months(trunc(sysdate, 'mm'), -14)
and
date_ < add_months(trunc(sysdate, 'mm'), -11)
trunc(sysdate, 'mm')
усекает текущую дату до начала месяца. Добавить -14 месяцев переносится с 1 августа 2021 года на 1 июня 2020 года (на 14 месяцев раньше). Добавить -11 месяцев переносится на 1 сентября 2020 года; вам нужны данные строго до 1 сентября 2020 года.
Ответ №2:
Вы можете отфильтровать, когда дата :
- До начала следующего месяца, а также до или после двух месяцев до начала этого месяца; или
- До начала месяца 11 месяцев назад и равно или после начала месяца 12 месяцев назад.
Если вы запустите его в августе 2021 года, вы получите все даты: июнь, июль и август 2021 года и август 2020 года.
Подобный этому:
WHERE ( date_column < ADD_MONTHS(TRUNC(SYSDATE, 'MM'), 1)
AND date_column >= ADD_MONTHS(TRUNC(SYSDATE, 'MM'), -2) )
OR ( date_column < ADD_MONTHS(TRUNC(SYSDATE, 'MM'), -11)
AND date_column >= ADD_MONTHS(TRUNC(SYSDATE, 'MM'), -12) )
Комментарии:
1. большое спасибо за ответ, но проблема в том, что функция trunc не распознается для каждой снежинки
2. @seb Ваш вопрос помечен как «дата oracle sql» в вашем вопросе или тегах нет упоминания о снежинке, так как мы должны знать, что вы используете snowflake, если вы не скажете нам об этом? Из (очень) краткого поиска выясняется, что у snowflake есть
date_trunc
функция , поэтому, возможно, вы могли бы ее использовать; или вы могли бы пометить свой вопрос соответствующим образом, чтобы эксперт по предмету, который знает о snowflake, мог видеть, что вы хотите получить ответ.