【问题标题】:Week start from Sunday while calculating weekday周从星期日开始计算工作日
【发布时间】:2022-12-11 06:37:23
【问题描述】:

我正在尝试找到周日到周六的工作日。在 oracle 中,默认情况下星期一是一周的第一天。所以当我使用以下查询计算工作日时

Select    to_char(sysdate, 'D')  from dual

因为今天是 2022 年 9 月 12 日,这给了我 5 作为一周从星期一开始的结果。我希望这应该从星期日开始计算为一周。理想情况下,如果本周从周日开始,答案应该是6

有什么简单的方法吗,我可以使用 case 语句,但这不是一个好方法。请帮忙。

【问题讨论】:

    标签: sql oracle nls-lang


    【解决方案1】:

    与您的 DBA 交谈以解决问题。如果它被设置为例如印度,那你就不必计算任何事物:

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

    【讨论】:

    • 如果 sysdate 是星期日怎么办这将给我 8,在那种情况下它应该显示 1
    • 真的;这是一个愚蠢的建议。修复领土(或使用 CASE,但这是您无论如何都想避免的事情)。
    【解决方案2】:

    在 Oracle 中,一周的第一天由 NLS_TERRITORY 参数确定。所以使用a value of NLS_TERRITORY,其中星期日是第一个工作日,例如AMERICA

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

    fiddle

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-01-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-08-01
      • 2017-07-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多