Oracle SQL: Запрос с начала года на каждый год

#sql #oracle

Вопрос:

Как бы я написал запрос Oracle SQL, чтобы извлечь каждую запись из таблицы, в которой дата меньше или равна этому дню этого года?

Например:

Мой столик:

поле даты
01/01/2010
12/31/2010
01/01/2021
07/21/2021

Моя цель, если запрос был выполнен 21.07.201021

поле даты
01/01/2010
01/01/2021
07/21/2021

Ответ №1:

Вы можете преобразовать месяц/день в строку и сравнить:

 select t.*
from t
where to_char(date_field, 'MMDD') < to_char(sysdate, 'MMDD');
 

Ответ №2:

Это потенциальное решение.

   SELECT date_field
        FROM sample_data
       WHERE date_field <=
             TO_DATE (
                  (   TO_CHAR (SYSDATE, 'MM/DD/')
                   || EXTRACT (YEAR FROM date_field))
                     ,'MM/DD/RRRR')
 

Ответ №3:

Другой вариант-извлечь и сравнить месяцы и дни в виде чисел:

 select date_field
from your_table
-- any earlier month
where extract(month from date_field) < extract(month from sysdate)
or (
  -- any earlier or same day in this month
  extract(month from date_field) = extract(month from sysdate)
  and extract(day from date_field) <= extract(day from sysdate)
)
order by date_field
 

db<>скрипка

С помощью этого или строкового подхода @Gordon вы можете извлечь выгоду из индексов, основанных на функциях, хотя, если ваши данные действительно не будут искажены к концу года, они, вероятно, здесь не помогут.