过滤过去两周的日期

Date filtering from past two weeks

我有一个 SQL 查询,我试图 select 仅记录当前过去两周的记录,即使用 'created_on' 列。任何想法是如何做到的?我知道我不能使用具体日期,因为现在总是在变化。

select un.id
      , t.type_name as type
      , un.content_id
      , un.app_link
      , un.notification_text
      , t.id as type_id
      , un.seen_yn,un.created_on
      , to_char(un.created_on,'YYYY-MM-DD: HH24:MI') as timestamp
from app.user_notifications as un 
       left join ref.types as t on t.id = un.notification_type
where un.active_yn = true 
and   un.user_id =  1 
and   un.seen_yn = false                                       order by un.created_on desc

再添加一个条件,例如

... and un.created_on >= trunc(sysdate) - 14

在 Oracle 中,当您从 DATE 数据类型值中减去数字时,您减去了那么多天 - 减去 14 两周 之前。

SQL> select sysdate right_now,
  2         trunc(sysdate) today_midnight,
  3         trunc(sysdate) - 14 two_weeks_back
  4  from dual;

RIGHT_NOW           TODAY_MIDNIGHT      TWO_WEEKS_BACK
------------------- ------------------- -------------------
22.03.2022 07:12:54 22.03.2022 00:00:00 08.03.2022 00:00:00

SQL>

或者,如果您更喜欢interval(实际上您在做什么),那么

SQL> select trunc(sysdate) - interval '14' day from dual;

TRUNC(SYSDATE)-INTE
-------------------
08.03.2022 00:00:00

SQL>

您可以将 created_on 列与计算“今天前两周”的表达式进行比较:

un.created_on >= current_date - interval '2 weeks'

或者您也可以减去 14 天

un.created_on >= current_date - 14