查询特定日期的 Oracle 数据库
Posted
技术标签:
【中文标题】查询特定日期的 Oracle 数据库【英文标题】:Query Oracle database for a specific Day 【发布时间】: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()
。如果它不适用于“星期三”,不确定这是否会解决问题,因为它周围没有任何空格。
【参考方案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
【讨论】:
以上是关于查询特定日期的 Oracle 数据库的主要内容,如果未能解决你的问题,请参考以下文章
在特定日期时间从 Oracle 数据库中检索数据,然后在 php 中将它们发布到 firebase
将日期附加到字符串以在 oracle 中获取表名并对其进行选择查询