Oracle 星期几问题

Posted

技术标签:

【中文标题】Oracle 星期几问题【英文标题】:Oracle day of the week issue 【发布时间】: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;

【问题讨论】:

【参考方案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 可以表示星期日,但也可以表示星期一 - 这取决于地区设置。

以上是关于Oracle 星期几问题的主要内容,如果未能解决你的问题,请参考以下文章

oracle中星期几的比较

使用 oracle SQL 查找日期范围内的星期几

JS如何利用日期判断星期几

在sql中怎样获得已知日期是星期几

使用 to_date oracle 函数使用星期数和天数 oracle

我正在使用 Oracle SQL Developer 并希望从时间戳中提取星期几。我的语法是不是正确?