V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
coolicer
V2EX  ›  程序员

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

  •  
  •   coolicer · 2015-07-27 09:36:40 +08:00 · 9566 次点击
    这是一个创建于 3412 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

    然后就找不到那条记录了

    10 条回复    2015-07-27 20:20:55 +08:00
    Guozi1989
        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';
    coolicer
        2
    coolicer  
    OP
       2015-07-27 09:59:38 +08:00
    @Guozi1989 我传的就是2015-7-22 23:59:59这种字串。
    Guozi1989
        3
    Guozi1989  
       2015-07-27 10:02:02 +08:00
    @coolicer 可以Debug看看进去是什么样的。
    yanyanlong
        4
    yanyanlong  
       2015-07-27 10:02:58 +08:00
    AND TIME BETWEEN '22-7月 -15' AND '22-7月 -15' 这边两个都要做to_date()操作,尽量不要让系统做自动类型转换。
    coolicer
        5
    coolicer  
    OP
       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
        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'')' ;
    avichen
        7
    avichen  
       2015-07-27 11:00:06 +08:00
    用to_char()转换后比较试试
    coolicer
        8
    coolicer  
    OP
       2015-07-27 11:42:32 +08:00
    @songpengf117 在你的基础上改改就可以了。
    zlowly
        9
    zlowly  
       2015-07-27 17:27:52 +08:00
    另外稍微离题提醒一下,除非业务上明确要求,还是不应用between and来选择时间范围,正确应该是大于等于某天0点并且小于某天0点这样才严谨,否则如果有条记录是23:59:59.500这个时间的就会给你给你排除掉了。
    coolicer
        10
    coolicer  
    OP
       2015-07-27 20:20:55 +08:00
    @zlowly 以前有想过这种,我们这种是售票的,不可能会在这么晚还在吧。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1174 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 18:50 · PVG 02:50 · LAX 10:50 · JFK 13:50
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.