计算工作日时从星期日开始



我想找到周日到周六的工作日。在oracle中,默认星期一是一周的第一天。因此,当我使用以下查询

计算工作日时
Select    to_char(sysdate, 'D')  from dual

今天是09/12/2022,这是给我的结果作为5从周一开始的一周。我想这应该从周日开始计算。理想情况下,如果这周从周日开始,答案应该是6

是否有简单的方法,我可以用例语句,但这不是一个好方法。请帮助。

与您的DBA交谈以确定区域。如果它被设置为例如印度,那么你就不需要计算任何东西:

SQL> alter session set nls_territory = 'India';
Session altered.
SQL> Select    to_char(sysdate, 'D') from dual;
T
-
6
SQL>

在Oracle中,一周的第一天由NLS_TERRITORY参数决定。因此,使用星期日为第一个工作日的NLS_TERRITORY值,例如AMERICA

alter session set nls_territory=RUSSIA
select to_char(sysdate, 'D')
from dual
TO_CHAR(SYSDATE,'D')

选项1:NLS_TERRITORY会话参数

在Oracle中,星期几取决于NLS_TERRITORY会话设置:

SELECT TO_CHAR(DATE '2022-12-11', 'D') AS day, -- a sunday
(SELECT value FROM NLS_SESSION_PARAMETERS WHERE parameter = 'NLS_TERRITORY')
AS territory
FROM   DUAL;

对不同的参数输出不同的值。例如,如果你使用:

ALTER SESSION SET NLS_TERRITORY='America';
ALTER SESSION SET NLS_TERRITORY='Germany';
ALTER SESSION SET NLS_TERRITORY='India';
ALTER SESSION SET NLS_TERRITORY='Oman';
ALTER SESSION SET NLS_TERRITORY='Bangladesh';

并运行查询,输出如下:

我找到了这个问题的答案,这很容易。

select mod(to_char(sysdate,'D'),7)+1 as Weekday from Dual

最新更新