数据库是10g ,在商品信息表中有商品有效时间。开始时间starttime和结束时间endTimecreate table TB_TEST
(
ID INTEGER not null,
STARTTIME VARCHAR2(20) not null,
ENDTIME VARCHAR2(20) not null
);
insert into tb_test(id,starttime,endtime)
values(1,'09:00','22:00');
insert into tb_test(id,starttime,endtime)
values(2,'23:00','05:00');
commit;
问题:
现在要查询出当前时间在其有效时间范围内的数据,对于同一天的好处理,但对于跨天的该如何处理?
这个sql该怎么写?或者是用存储过程来实现么? 求思路,求答案 ,,,谢谢
(
ID INTEGER not null,
STARTTIME VARCHAR2(20) not null,
ENDTIME VARCHAR2(20) not null
);
insert into tb_test(id,starttime,endtime)
values(1,'09:00','22:00');
insert into tb_test(id,starttime,endtime)
values(2,'23:00','05:00');
commit;
问题:
现在要查询出当前时间在其有效时间范围内的数据,对于同一天的好处理,但对于跨天的该如何处理?
这个sql该怎么写?或者是用存储过程来实现么? 求思路,求答案 ,,,谢谢
解决方案 »
- 货款是什么意思?货物的款?
- 在Action中把从jsp页面传过来的数据创建临时表
- oracle中建立唯一约束与唯一索引的区别
- 请人帮忙送分的:Oracle中在不使用序列,不使用主键,只允许使用SQL语
- oratab是不是只有Linux上才有
- 做在删除前触发的delete 触发器的时候,怎么取得删除记录的id?(id是主键)
- 感觉贼龌龊的一个查询!?怎么改啊!?
- oracle Httm手册
- 我要将数据库里面的TIME显示为05-SEP-2002转换为2002-09-05,如何做?
- 用pl\sql developer 导入dmp表报错
- oracle 存储过程返回数组问题 求教
- 执行查询语句这是报什么错啊
如果starttime-endtime>0 表示就是有隔天,<0 就是当天!
SELECT *
FROM TB_TEST
WHERE TO_DATE(TO_CHAR(SYSDATE, 'yyyymmdd') || ' ' || STARTTIME,
'yyyymmdd hh24:mi') <= SYSDATE
AND TO_DATE(CASE WHEN STARTTIME > ENDTIME THEN
TO_CHAR(SYSDATE, 'yyyymmdd') ELSE
TO_CHAR(SYSDATE + 1, 'yyyymmdd') END || ' ' || ENDTIME,
'yyyymmdd hh24:mi') > SYSDATE
因为根据你给出的条件,我可以认为 第一条记录是 第一天 9:00 开始 第二天22:00结束,也跨天了。所以跨天条件是解决这个问题的关键,而跨天条件应该属于你的业务规定了,先明确一下。