如何在 oracle 中使用 trunc(sysdate) 获取以前的工作日期

How to get previous working date using trunc(sysdate) in oracle

今天的问候!

我已经编写了一个 python 脚本,它将 运行 使用 oracle 数据库进行 select 查询,并将根据从该查询获得的结果与用户共享结果。我的目查询日期为星期五,如果星期二则为星期一,依此类推。

注意:在 T+1 基础上查询 运行s 的报告意味着如果 asof 日期是 2022 年 4 月 21 日意味着它的实际开始时间将是 2022 年 4 月 22 日,所以什么时候 运行 4 月 25 日(星期一)截止日期为 4 月 22 日

select* from snap_states
where asof = trunc(sysdate)-1
  and upper(system) like ('LOANSL%')
order by start_time;***

如果您跳过周末,那么您可以

SQL> with datum (sys_date) as
  2    (select date '2022-04-23' from dual union all -- Saturday
  3     select date '2022-04-24' from dual union all -- Sunday
  4     select date '2022-04-25' from dual union all -- Monday
  5     select date '2022-04-26' from dual           -- Tuesday
  6    )
  7  select to_char(sys_date, 'dd.mm.yyyy, Dy') sys_date,
  8         trunc(sys_date - case to_char(sys_date, 'Dy', 'nls_date_language = english')
  9                                 when 'Sun' then 2
 10                                 when 'Mon' then 3
 11                                 else 1
 12                          end) as prev_work_day
 13  from datum;

SYS_DATE                 PREV_WORK_
------------------------ ----------
23.04.2022, Sat          22.04.2022
24.04.2022, Sun          22.04.2022
25.04.2022, Mon          22.04.2022
26.04.2022, Tue          25.04.2022

SQL>

应用于您的查询:

select * 
from snap_states
where asof = trunc(sysdate - case to_char(sysdate, 'Dy', 'nls_date_language = english') 
                                when 'Sun' then 2
                                when 'Mon' then 3
                                else 1
                             end)
  and upper(system) like 'LOANSL%'
order by start_time;