我在日期列中有数据,如下所示。
报告日期
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