Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/70.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 带有Like和';%的Oracle DB查询时间戳';_Sql_Database_Oracle_Timestamp - Fatal编程技术网

Sql 带有Like和';%的Oracle DB查询时间戳';

Sql 带有Like和';%的Oracle DB查询时间戳';,sql,database,oracle,timestamp,Sql,Database,Oracle,Timestamp,我想列出2018年11月10日至2018年11月18日上午5:00左右其TARGET_COMMIT字段日的所有记录。我一直在使用此查询: select * from (select * from GGS_ADMIN.GGS_HEARTBEAT_HISTORY where DELGROUP='REPDELTA' and TARGET_COMMIT between '10/Nov/2018' and '18/Nov/2018') where TARGET_COMMIT like '%/Nov/

我想列出2018年11月10日至2018年11月18日上午5:00左右其
TARGET_COMMIT
字段日的所有记录。我一直在使用此查询:

select * from (select * from GGS_ADMIN.GGS_HEARTBEAT_HISTORY  
where DELGROUP='REPDELTA' and TARGET_COMMIT between '10/Nov/2018' 
and '18/Nov/2018') where TARGET_COMMIT like '%/Nov/2018 5:%:%.% AM';
下面是我的内部查询结果的一条记录:

SBLPROF,    EDELTA, 11/10/2018 5:56:22.064830 AM,   11/10/2018 
5:56:27.495548 AM,
11/10/2018 5:56:24.731541 AM,   2.666711,               11/10/2018 
5:56:26.305759 AM,  REPDELTA    ,   5.430718,   3,  11/10/2018 
5:56:22.820934 AM,  0,  14441,  0,  14441
这里的“11/10/2018 5:56:27.495548 AM”是我的目标提交字段

如果使用

select * from (select * from GGS_ADMIN.GGS_HEARTBEAT_HISTORY where 
DELGROUP='REPDELTA' and TARGET_COMMIT between '10/Nov/2018'  and 
'18/Nov/2018') where TARGET_COMMIT like '11/10/2018 5:56:27.495548 AM'
它匹配并列出结果,而不是我以前的查询。为什么我不能使用“like”函数和“%”作为时间戳

顺便说一下,这是我的双重结果:

select sysdate from dual; 

  SYSDATE                 
11/18/2018 04:11:53 PM 
1 row selected.

提前谢谢

您可以使用
时间戳
文字和
提取
。对于范围,最好使用
=
=时间戳“2018-11-10 00:00:00”
目标提交<时间戳'2018-11-18 00:00:00'+间隔'1'天
和提取(距离目标提交的小时数)=5
如果需要所需的格式,还可以使用

WHERE    
target_commit >=  TO_TIMESTAMP('10/Nov/2018','dd/mon/yyyy')  AND 
target_commit <   TO_TIMESTAMP('18/Nov/2018','dd/mon/yyyy') + INTERVAL '1' DAY
AND EXTRACT ( HOUR FROM target_commit) = 5
在哪里
目标提交>=到时间戳('2018年11月10日','2018年11月10日','dd/mon/yyyy'),以及
目标提交<至时间戳('2018年11月18日','dd/mon/yyyy')+间隔'1'天
和提取(距离目标提交的小时数)=5

您可以使用
时间戳
文字和
提取
。对于范围,最好使用
>=
=时间戳“2018-11-10 00:00:00”
目标提交<时间戳'2018-11-18 00:00:00'+间隔'1'天
和提取(距离目标提交的小时数)=5
如果需要所需的格式,还可以使用

WHERE    
target_commit >=  TO_TIMESTAMP('10/Nov/2018','dd/mon/yyyy')  AND 
target_commit <   TO_TIMESTAMP('18/Nov/2018','dd/mon/yyyy') + INTERVAL '1' DAY
AND EXTRACT ( HOUR FROM target_commit) = 5
在哪里
目标提交>=到时间戳('2018年11月10日','2018年11月10日','dd/mon/yyyy'),以及
目标提交<至时间戳('2018年11月18日','dd/mon/yyyy')+间隔'1'天
和提取(距离目标提交的小时数)=5

TARGET\u COMMIT的数据类型是什么?
TARGET\u COMMIT TIMESTAMP(6)
like
对字符串进行操作,因此在时间戳上使用
like
意味着Oracle首先必须将其转换为字符串,如果不指定格式,则效率低下且不可预测,因为在运行时它将被迫依赖会话默认值。
TARGET\u COMMIT
的数据类型是什么?TARGET\u COMMIT TIMESTAMP(6)
like
对字符串进行操作,因此在时间戳上使用
like
意味着Oracle必须首先将其转换为字符串,如果不指定格式,则效率低下且不可预测,因为在运行时它将被迫依赖会话默认值。非常感谢!:)我有问题要问你。我可以使用命令“INTERVAL'1'DAY”和“EXTRACT(HOUR FROM target_commit)=5”,因为“target_commit”是“timestamp”,对吗?还有,为什么要使用“>=”和“@UmutTEKİN:如果你知道它是如何工作的,那么在
之间使用
没有什么错。它使用包含范围。因此,你别无选择,只能构造参数x和y,这样它就应该满足
a>=x&&a=,非常感谢!:)我有问题要问你。我可以使用命令“INTERVAL'1'DAY”和EXTRACT(HOUR FROM target_commit)=5”,因为“target_commit”是“timestamp”,对吧?还有,如果你知道它是如何工作的,为什么要使用“>=”和“@UmutTEKİN:在
之间使用
没有什么错。它使用包含范围。因此,您别无选择,只能构造参数x和y,使其满足
a>=x&&a=,