单独去执行sql,能查到一条记录:
select * from TABLE where TIME BETWEEN to_date('2015-7-22 00:00:00','YYYY-MM-DD HH24:MI:SS')
and to_date('2015-7-22 23:59:59','YYYY-MM-DD HH24:MI:SS');
我把它弄成存储过程,拼where条件时,调试过程,发现变成这样的。这里好像不见了时分秒,为什么呢?
AND TIME BETWEEN '22-7月 -15' AND '22-7月 -15'
然后就找不到那条记录了
1
Guozi1989 2015-07-27 09:57:44 +08:00
因为这两个值是你传进去的,是不是传进去就没带时分秒。或者你可以这样写:
SELECT * FROM TABLE A WHERE A.TIME >= DATE '2015-07-22' AND A.TIME < DATE '2015-07-23'; |
4
yanyanlong 2015-07-27 10:02:58 +08:00
AND TIME BETWEEN '22-7月 -15' AND '22-7月 -15' 这边两个都要做to_date()操作,尽量不要让系统做自动类型转换。
|
5
coolicer OP @yanyanlong
这句是这样的 V_WHERE :=V_WHERE||' AND TIME BETWEEN ' || chr(39) || to_date(I_S_TIME,'YYYY/MM/DD HH24:MI:SS') || chr(39) || ' AND ' ||chr(39)|| to_date(I_E_TIME, 'YYYY/MM/DD HH24:MI:SS') || chr(39); |
6
songpengf117 2015-07-27 10:56:05 +08:00 1
V_WHERE :=V_WHERE||' AND TIME BETWEEN ' || chr(39) || 'to_date(' || I_S_TIME || ',''YYYY/MM/DD HH24:MI:SS'')' || chr(39) || ' AND ' ||chr(39)|| 'to_date(' || I_E_TIME || ', ''YYYY/MM/DD HH24:MI:SS'')' || chr(39);
或者 V_WHERE :=V_WHERE||' AND TIME BETWEEN to_date(' || I_S_TIME || ',''YYYY/MM/DD HH24:MI:SS'') AND to_date(' || I_E_TIME || ', ''YYYY/MM/DD HH24:MI:SS'')' ; |
7
avichen 2015-07-27 11:00:06 +08:00
用to_char()转换后比较试试
|
8
coolicer OP @songpengf117 在你的基础上改改就可以了。
|
9
zlowly 2015-07-27 17:27:52 +08:00
另外稍微离题提醒一下,除非业务上明确要求,还是不应用between and来选择时间范围,正确应该是大于等于某天0点并且小于某天0点这样才严谨,否则如果有条记录是23:59:59.500这个时间的就会给你给你排除掉了。
|