oracle 日期转化怎么把时分 秒去掉了

2015-07-27 09:36:40 +08:00
 coolicer

单独去执行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'

然后就找不到那条记录了

9474 次点击
所在节点    程序员
10 条回复
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';
coolicer
2015-07-27 09:59:38 +08:00
@Guozi1989 我传的就是2015-7-22 23:59:59这种字串。
Guozi1989
2015-07-27 10:02:02 +08:00
@coolicer 可以Debug看看进去是什么样的。
yanyanlong
2015-07-27 10:02:58 +08:00
AND TIME BETWEEN '22-7月 -15' AND '22-7月 -15' 这边两个都要做to_date()操作,尽量不要让系统做自动类型转换。
coolicer
2015-07-27 10:08:14 +08:00
@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);
songpengf117
2015-07-27 10:56:05 +08:00
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'')' ;
avichen
2015-07-27 11:00:06 +08:00
用to_char()转换后比较试试
coolicer
2015-07-27 11:42:32 +08:00
@songpengf117 在你的基础上改改就可以了。
zlowly
2015-07-27 17:27:52 +08:00
另外稍微离题提醒一下,除非业务上明确要求,还是不应用between and来选择时间范围,正确应该是大于等于某天0点并且小于某天0点这样才严谨,否则如果有条记录是23:59:59.500这个时间的就会给你给你排除掉了。
coolicer
2015-07-27 20:20:55 +08:00
@zlowly 以前有想过这种,我们这种是售票的,不可能会在这么晚还在吧。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/208556

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX