过滤过去两周的日期
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
我有一个 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