【发布时间】:2021-08-30 21:23:51
【问题描述】:
我几乎不知道 SQL。我正在努力实现以下目标:
例如,我有下表有 2 个字段
NAME VARCHAR(20)
BDAY TIMESTAMP(6)
我需要找出所有的生日是上一年和之前的当前月份。例如,如果我在 2021 年 8 月 15 日运行查询,我需要查找月份/日期为 08/2020(忽略日期部分)及之前的所有记录。因此,某些条目可能少于 12 个月(前一年当前月份的查询日之后的条目)并且需要包含在返回的行中。
如果我有以下记录并且我在 2021 年 8 月 15 日运行查询
Mark 12/22/2018
Mike 10/15/2019
Joe 07/31/2020
John 08/06/2020
Jill 08/28/2020
Bill 08/31/2020
Jack 09/01/2020
Jeb 08/08/2021
它需要返回以下内容:
Mark 12/22/2018
Mike 10/15/2019
Joe 07/31/2020
John 08/06/2020
Jill 08/28/2020
Bill 08/31/2020
如果我做了以下类似的事情,
select * from BDAY where BDAY < add_months(systimestamp,-12) order by BDAY desc;
它将排除上一年当前月份在查询运行日期之后的条目。我可以使用复杂的查询获得所需的结果,但我想知道是否有更简单的方法可以做到这一点,例如一个预言机函数。
【问题讨论】:
-
只要使用
<trunc(add_months(sysdate ,-11), 'mm')