oracle语句中,如何查询某个时间段的内容,where后应该怎么写,比如我查询3:00到3:30的

数据中有2013-02-24/15:21:38这种的数据

亲,您好。oracle日期可以进行加减的
例如:select sysdate,sysdate-1/48 from dual;
sysdate-1/48 就是往前推半个小时
亲的问题可以参考这个写,希望对亲有帮助
温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-05-31
如果数据库的列, 是 DATE 类型的话:

WHERE
TO_CHAR( 日期列, 'HH24MI' ) >= '0300'

AND TO_CHAR( 日期列, 'HH24MI' ) <= '0330'

如果是 varchar2 类型的, 就要确定一下, 格式是否都是 固定的格式了。
否则 SUBSTR 计算起来, 也是很麻烦的。追问

HH24MI' 这个是什么,固定的格式吗?应该是date类型的,我读的是 v$sql试图,我想看具体哪个时间段的操作

追答SQL> SELECT TO_CHAR( SYSDATE,  'HH24MI' ) FROM dual;

TO_C
----
1527


HH24 是获取时间中的小时部分, 是按24小时的方式来计算的

MI  是获取时间中的 分钟的部分。

追问

select *
from v$sql

WHERE TO_CHAR(first_load_time, 'HH24MI') >= '0300'

AND TO_CHAR(first_load_time, 'HH24MI') <= '0330'
这样写对吗?,我运行报错啊,报01722错误

追答

SQL> desc v$sql

 名称                                      是否为空? 类型

 ----------------------------------------- -------- ----------------------------

......

 FIRST_LOAD_TIME                                    VARCHAR2(19)

......


 FIRST_LOAD_TIME  数据类型是  VARCHAR2(19),     不是  DATE


你这个情况下, 需要用 SUBSTR 函数了

下面是例子

SQL> SELECT 
  2    FIRST_LOAD_TIME 
  3  FROM 
  4    v$sql
  5  WHERE
  6    SUBSTR(FIRST_LOAD_TIME, 12, 5) BETWEEN '02:00' AND '05:00'
  7    AND rownum < 5;

FIRST_LOAD_TIME
--------------------------------------
2013-05-27/02:15:26
2013-05-27/02:27:52
2013-05-27/02:34:56
2013-05-27/02:34:56

第2个回答  推荐于2017-09-04
SQL>alter session set nls_date_format='YYYY-MM-DD/HH24:MI:SS';
SQL>select to_char(sysdate,'YYYY-MM-DD/HH24:MI:SS') from dual;
SQL>select TO_DATE( '2013-05-31/01:23:45', 'YYYY-MM-DD/HH24:MI:SS') from dual;
SQL>select count(*) from table_name where create_time between to_date('2013-05-31/03:00:00','YYYY-MM-DD/HH24:MI:SS') and to_date ('2013-05-31/03:30:00','YYYY-MM-DD/HH24:MI:SS');本回答被提问者采纳
第3个回答  2013-05-31
用between ‘3:00’ and ‘3:30’