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 星期几问题的主要内容,如果未能解决你的问题,请参考以下文章