【发布时间】:2021-07-21 17:12:34
【问题描述】:
如何编写 Oracle SQL 查询以从日期小于或等于当年这一天的表中提取每条记录?
例如:
我的桌子:
| date_field |
|---|
| 01/01/2010 |
| 12/31/2010 |
| 01/01/2021 |
| 07/21/2021 |
如果查询在 2021 年 7 月 21 日运行,我的目标
| date_field |
|---|
| 01/01/2010 |
| 01/01/2021 |
| 07/21/2021 |
【问题讨论】:
如何编写 Oracle SQL 查询以从日期小于或等于当年这一天的表中提取每条记录?
例如:
我的桌子:
| date_field |
|---|
| 01/01/2010 |
| 12/31/2010 |
| 01/01/2021 |
| 07/21/2021 |
如果查询在 2021 年 7 月 21 日运行,我的目标
| date_field |
|---|
| 01/01/2010 |
| 01/01/2021 |
| 07/21/2021 |
【问题讨论】:
您可以将月/日转换为字符串并进行比较:
select t.*
from t
where to_char(date_field, 'MMDD') < to_char(sysdate, 'MMDD');
【讨论】:
这是一个潜在的解决方案。
SELECT date_field
FROM sample_data
WHERE date_field <=
TO_DATE (
( TO_CHAR (SYSDATE, 'MM/DD/')
|| EXTRACT (YEAR FROM date_field))
,'MM/DD/RRRR')
【讨论】:
另一种选择是提取月份和日期并将其作为数字进行比较:
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 的字符串方法,您可能会从基于函数的索引中受益,但除非您的数据在年底时确实偏斜,否则它们可能无济于事。 p>
【讨论】: