查询特定日期的 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 中获取表名并对其进行选择查询

Yii2 Oracle日期列

ORACLE PL/SQL - 使用 SYSDATE 检索特定日期的数据时出现检索问题

PHP-数据库系统日期时间的一些查询语句

oracle中如何修改日期类型的字段值