如何在预言机中编写 where 子句的日期条件



我在日期列中有数据,如下所示。

报告日期

21-一月-1702-二月-17

我想编写一个查询来获取 01/21/2017 的数据?

下面的查询在甲骨文中不起作用。

选择 * 从表名,其中报告日期=to_date('01/21/2017','mm/dd/yyyy')

reportDate的数据类型是什么?它可能是 DATE 或 VARCHAR2,仅通过查看它无法知道。

运行describe table_name(其中table_name是包含此列的表的名称)并查看它的内容。

如果是VARCHAR2,那么您还需要将其转换为日期。使用正确的格式模型:'dd-Mon-rr'

如果是 DATE,它可能具有时间组件;您可以对其应用trunc(),但如果可以避免,最好避免在列上调用函数,以提高速度。在这种情况下(如果它确实是 DATE 数据类型),where条件应该是

where report_date >= to_date('01/21/2017','mm/dd/yyyy') 
  and report_date <  to_date('01/21/2017','mm/dd/yyyy') + 1

请注意,右侧的日期也可以写成,最好是

date '2017-01-21'

(这是 ANSI 标准日期文本,它需要关键字 date 和显示的格式因为它不使用格式模型;使用 - 作为分隔符,格式yyyy-mm-dd

查询应该是这样的

SELECT * 
FROM table_name 
WHERE TRUNC(column_name) = TO_DATE('21-JAN-17', 'DD-MON-RR');

TRUNC函数返回特定于该列的日期值。

我在 sqldeveloper 中执行时得到的 o/phttps://i.stack.imgur.com/blDCw.png

最新更新