select * from t where to_char(time_b,'hh24:mi:ss') between '00:00:01'and '12:00:00'

解决方案 »

  1.   

    楼主那样写是不对的,因为用to_date('00:00:01','hh24:mi:ss') 时默认会加上当前月第一天的日期,实际上to_date('00:00:01','hh24:mi:ss') 就变成了 2006-1-1 00:00:01,楼上的写法是可行的
      

  2.   

    libin_ftsafe(子陌红尘)的写法就是对比字符串了
    字符串对比能保证对比时间正确吗?
      

  3.   

    楼上的那种写法只是可行,对于大表而言,由于可能无法使用索引,导致效率很低。我的方案:SELECT COUNT(*)
    FROM A
    WHERE DT
    BETWEEN TO_DATE( (SELECT TO_CHAR(MIN(DT),'YYYYMMDD') || '00:00:01' FROM A) ,'YYYYMMDD HH24:MI:SS' )
    AND TO_DATE( (SELECT TO_CHAR(MAX(DT),'YYYYMMDD') || '00:00:01' FROM A) ,'YYYYMMDD HH24:MI:SS' )
    /楼上的方案:select COUNT(*) from a where to_char(dt,'hh24:mi:ss') between '00:00:01'and '12:00:00';
    我在本地对一个实际的10万条记录的数据表测试,
    我的方案执行时间为0.00,楼上的方案执行时间为 0.08当然,前提条件是 dt 上有索引。
      

  4.   

    楼上的不对啊,MIN(DT)和MAX(DT)之间的所有记录都统计了
      

  5.   

    select * from t where to_date(time_b,'hh24:mi:ss') >='00:00:01' and    to_date(time_b,'hh24:mi:ss') <='12:00:00'