Sql 甲骨文:只按小时比较日期
我们有一个表,它有一个日期列d 我想得到d列大于/小于某个值的所有行,而不考虑日期 比如说Sql 甲骨文:只按小时比较日期,sql,oracle,plsql,oracle11g,Sql,Oracle,Plsql,Oracle11g,我们有一个表,它有一个日期列d 我想得到d列大于/小于某个值的所有行,而不考虑日期 比如说 | d | ------------------- |2009/11/1 15:55:23| -------------------- |2009/11/2 15:55:23| -------------------- |2009/11/3 15:55:23| -------------------- |2009/11/3 17:55:23| ----------------
| d |
-------------------
|2009/11/1 15:55:23|
--------------------
|2009/11/2 15:55:23|
--------------------
|2009/11/3 15:55:23|
--------------------
|2009/11/3 17:55:23|
--------------------
例如,如果我想在下午5点之后标记所有记录:
select d
from my_table
where extract( hour from d ) > TO_DATE ('17:00:00','HH24:MI:SS')
这应该只返回一条记录
|2009/11/3 17:55:23|
我不知道这是否是最好的方法,但我在extract函数中遇到一个错误:
ORA-30076: invalid extract field for extract source
Cause: The extract source does not contain the specified extract field.
有更好的方法吗?
那个错误是怎么回事?extract仅适用于sysdate,就像我发现的所有示例一样
提前感谢试试这个:
select d from my_table
where (d-trunc(d)) > 16/24;
这个怎么样
select d
from my_table
where to_char(d,'HH24') > '16';
目前没有Oracle数据库可供测试,但我认为以下各项应该可以工作:
SELECT *
FROM MY_TABLE t
WHERE EXTRACT(HOUR FROM CAST(t.D AS TIMESTAMP)) > 16;
但我不明白为什么需要演员阵容,因为据说小时是日期中的有效字段
分享和享受。顺便说一句,基于谷歌搜索的时间戳类型只支持“小时”。在这种情况下,性能是否重要?只是好奇。考虑上面的表达式基于函数的索引:<代码>创建索引MyoTabLefFBI01在MyIX表上(ToaChar(DATEOCOL,HH24));<但是,根据您的示例,性能可能仍然不理想。假设日期列的每小时模式没有变化,您仍然可以获取1/3的数据,因此索引在这方面对您没有帮助。那么您是否找到了一个通用解决方案,使用小时字段和提取?为此,我需要一个跨DBMS兼容的解决方案。这解释了为什么需要转换为时间戳:“EXTRACT将expr解释为ANSI datetime数据类型。例如,EXTRACT不将日期视为旧版Oracle日期,而是将日期视为ANSI日期,不包含时间元素。”