【问题标题】:Query Oracle database for a specific Day查询特定日期的 Oracle 数据库
【发布时间】:2014-12-16 17:19:15
【问题描述】:

我需要找出一周中某一天发生的所有事件——比如星期三。我可以使用 to_char(event_date, 'Day') 将日期字段转换为显示日期,但是当我将它放在 where 子句中时,它不会返回任何结果。

例如: to_char(event_date, 'Day') = '星期三'

我也试过这个: 选择工作日 (从事件中选择 to_char(event_date, 'Day') "weekday") 其中工作日 = '星期三'

两者都不返回任何结果。有没有办法做到这一点?

【问题讨论】:

  • to_char(...) 函数包装在trim() 函数中,以消除末尾多余的空白字符。这为我解决了。
  • Oracle 有一个格式掩码可以去掉空格。您可以使用to_char(event_date, 'fmDay') 而不是rtrim()。如果它不适用于“星期三”,不确定这是否会解决问题,因为它周围没有任何空格。

标签: oracle


【解决方案1】:

可能你的数据库语言不是英文,我建议你这样设置NLS_DATE_LANGUAGE

to_char(event_date, 'Day','NLS_DATE_LANGUAGE=ENGLISH')

检查示例

select to_char(sysdate, 'Day','NLS_DATE_LANGUAGE=ENGLISH') from dual; --returns Tuesday
select to_char(sysdate, 'Day','NLS_DATE_LANGUAGE=SPANISH') from dual; --returns Martes

【讨论】:

    【解决方案2】:

    无论如何,这不是一个好方法。例如,使用我的 NLS 设置的 to_char(event_date, 'Day') 将产生 'Среда',而不是 'Wednesday'。尝试使用

    where to_char(event_day, 'D') = '3'
    

    它应该可以工作,例如

    SQL> select dt, to_char(dt, 'D')
      2  from (select trunc(sysdate, 'MM') + rownum - 1 dt from dual connect by level <= 31)
      3  where to_char(dt, 'D') = '3';
    
    DT          TO_CHAR(DT,'D')
    ----------- ---------------
    03.12.2014  3
    10.12.2014  3
    17.12.2014  3
    24.12.2014  3
    31.12.2014  3
    

    【讨论】:

      最近更新 更多