• 请不要在回答技术问题时复制粘贴 AI 生成的内容
coolicer
V2EX  ›  程序员

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

  •  
  •   coolicer · Jul 27, 2015 · 10006 views
    This topic created in 3954 days ago, the information mentioned may be changed or developed.

    单独去执行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 replies    2015-07-27 20:20:55 +08:00
    Guozi1989
        1
    Guozi1989  
       Jul 27, 2015
    因为这两个值是你传进去的,是不是传进去就没带时分秒。或者你可以这样写:
    SELECT * FROM TABLE A WHERE A.TIME >= DATE '2015-07-22' AND A.TIME < DATE '2015-07-23';
    coolicer
        2
    coolicer  
    OP
       Jul 27, 2015
    @Guozi1989 我传的就是2015-7-22 23:59:59这种字串。
    Guozi1989
        3
    Guozi1989  
       Jul 27, 2015
    @coolicer 可以Debug看看进去是什么样的。
    yanyanlong
        4
    yanyanlong  
       Jul 27, 2015
    AND TIME BETWEEN '22-7月 -15' AND '22-7月 -15' 这边两个都要做to_date()操作,尽量不要让系统做自动类型转换。
    coolicer
        5
    coolicer  
    OP
       Jul 27, 2015
    @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  
       Jul 27, 2015   ❤️ 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  
       Jul 27, 2015
    用to_char()转换后比较试试
    coolicer
        8
    coolicer  
    OP
       Jul 27, 2015
    @songpengf117 在你的基础上改改就可以了。
    zlowly
        9
    zlowly  
       Jul 27, 2015
    另外稍微离题提醒一下,除非业务上明确要求,还是不应用between and来选择时间范围,正确应该是大于等于某天0点并且小于某天0点这样才严谨,否则如果有条记录是23:59:59.500这个时间的就会给你给你排除掉了。
    coolicer
        10
    coolicer  
    OP
       Jul 27, 2015
    @zlowly 以前有想过这种,我们这种是售票的,不可能会在这么晚还在吧。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   2900 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 40ms · UTC 15:05 · PVG 23:05 · LAX 08:05 · JFK 11:05
    ♥ Do have faith in what you're doing.