Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/86.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 甲骨文:只按小时比较日期_Sql_Oracle_Plsql_Oracle11g - Fatal编程技术网

Sql 甲骨文:只按小时比较日期

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

我想得到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|
--------------------
例如,如果我想在下午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日期,不包含时间元素。”