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