【问题标题】:Oracle day of the week issueOracle 星期几问题
【发布时间】:2015-11-19 18:05:47
【问题描述】:

下面的语句正在返回正确的星期几,但是 在 case case 子句中使用表达式时,它不起作用。

Select to_char(SYSDATE,'Day') Dwo, 
       case when to_char(SYSDATE,'Day')='Thursday' 
            then 'BusDay' 
            else 'Non bus day' 
       end
 from DUAL;

【问题讨论】:

    标签: sql oracle date


    【解决方案1】:

    Oracle 倾向于在日期名称中添加空格。使用 'FMDay' 而不是 'Day' 来防止这种情况发生。

    顺便说一句:您依赖于将数据库会话设置为英语。最好明确告诉 TO_CHAR 使用哪种语言:

     to_char(SYSDATE, 'FMDay', 'NLS_DATE_LANGUAGE=american')
    

    【讨论】:

      【解决方案2】:
      select case when to_char(sysdate,'d')=5  --  (1 = Sunday ... 7 = Saturday)
                  then 'BusDay' 
                  else 'Non bus day' 
             end 
      from DUAL;
      

      【讨论】:

      • DAYOFWEEK 是 MySQL 而不是 Oracle DBMS。不过,处理天数的想法很好。但是,执行此操作的 Oracle 的 TO_CHAR(sysdate, 'd') 依赖于会话的 nls_territory 设置(即哪个工作日被认为是第一个),因此不幸的是,即使这样也是一个糟糕的选择。
      • 你说得对 DAYOFWEEK。我已更改为 to_char(sysdate,'d')。
      • 如前所述:最好不要使用它; 1 可以表示星期日,但也可以表示星期一 - 这取决于地区设置。
      猜你喜欢
      • 2013-01-09
      • 2016-09-07
      • 1970-01-01
      • 1970-01-01
      • 2013-12-31
      • 2020-04-12
      • 2016-10-22
      • 2015-05-13
      • 2022-08-10
      相关资源
      最近更新 更多