Как автоматически восстанавливаться месяц в году

#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, мог видеть, что вы хотите получить ответ.