Oracle 查询统计表中一段时间内所有的雨量值,结果发现数据库中的时间字段竟然是char型的,比如:
select  t2.STATIONNUM AS 站点编号, t2.STATIONNAME As 站点名称, t2.LONGITUDE AS 经度, t2.LATITUDE AS 纬度,t.INSERTTIME AS 日期时间,CAST(SUM(t.Precipitation)/10.0 as float) As 整点雨量 from rdb_insert.TABSTATION2 t2 inner join rdb_insert.TABTIMEDATA t on t2.STATIONNUM= t.STATIONNUM  where t.INSERTTIME Between '2011032916%' And '2011032916%' AND t2.COUNTY Like '%%' And Precipitation<>'9999' Group By t2.STATIONNUM,t2.STATIONNAME,t2.LONGITUDE,t2.LATITUDE,t.INSERTTIME  order by 整点雨量 DESC
结果发现用Between  根本不管用,怎么解决呢/

解决方案 »

  1.   

    能说的清楚一下吗,我接触ORACLE才三天时间, to_date() 在我这里怎么用啊,请赐教
      

  2.   

    to_date(t.INSERTTIME , 格式)
      

  3.   

    INSERTTIME Between '2011032916%' And '2011032916%' 
    第一次见到这种写法,between还跟模糊匹配结合啊!既然INSERTTIME是字符串,直接用like不就得  INSERTTIME like '2011032916%' 
      

  4.   

    如果都是相同的开头,比如说是同一天的
    可以用: 字段a like '20110329%' ,同一月就可以 like '201103%'
    如果要用某一段时间的
    可以用between,比如要3月1日零时到3月9日14时
    to_date(字段a,'yyyymmddhh24miss') Between to_date('2011-03-01 01:00:00','yyyy-mm-dd hh24:mi:ss') And to_date('2011-03-09 14:00:00','yyyy-mm-dd hh24:mi:ss') 
      

  5.   

    t.INSERTTIME Between '2011032916%' And '2011032916%' 
    你这是什么意思 想查某个时间段的吗?
    可以用
    t.INSERTTIME Between to_date('2011032916','yyyymmddhh24') And to_date('2011042916','yyyymmddhh24') 
    但是这样不能模糊查询
    你也可以用
    t.INSERTTIME >= '2011032916' And t.INSERTTIME <= '2011032916' 
    既然是时间段 不明白你为什么还要模糊查询
      

  6.   


    我用这个:INSERTTIME >= to_date('201103301010','yyyymmddhh24miss') And INSERTTIME <= to_date('201103302040','yyyymmddhh24miss')  
    进行查询,SQL 语句查询正确,结果也查出来了,但是后面又出错了,提示“ORA-01861: 文字与格式字符串不匹配”,我核实了一下,是数据表中的数据的日期格式与我格式化日期不对应造成的,数据表的数据是精确到了分钟,例如:“201103302040”,后面没有秒,我试了好几种写法,很纳闷,还是没有通过,请各位赐教一下、
      

  7.   

    有手册最好了,[email protected],谢谢njlywy大哥!
      

  8.   

    char 也没有关系,因为日期时间类型每条记录都完全相同长度,反而是更方便比较,比如你拿到了 2010 年的数据,只要 >= '20100000000000' and < '20110000000000' 就可以了,这种情况下没有必要用 like,因为你是精确的知道一个时间范围的,like 不是用来做范围查找而是更方便用于不定长度的比较。
      

  9.   


    select t2.STATIONNUM AS 站点编号,
           t2.STATIONNAME As 站点名称, 
           t2.LONGITUDE AS 经度, 
           t2.LATITUDE AS 纬度,
           t.INSERTTIME AS 日期时间,
           CAST(SUM(t.Precipitation)/10.0 as float) As 整点雨量 
    from rdb_insert.TABSTATION2 t2 inner join rdb_insert.TABTIMEDATA t 
         on t2.STATIONNUM= t.STATIONNUM 
    where (to_date(INSERTTIME,'yyyymmddhh24mi') >= to_date('201103301010','yyyymmddhh24mi') And 
          to_date(INSERTTIME,'yyyymmddhh24mi') <= to_date('201103302040','yyyymmddhh24mi'))
          AND 
          t2.COUNTY Like '%/%' escape '/' And Precipitation<>'9999' 
    Group By t2.STATIONNUM,t2.STATIONNAME,
          t2.LONGITUDE,t2.LATITUDE,t.INSERTTIME 
    order by 整点雨量 DESC;--注意:通配符%的使用,和转义字符的使用
      

  10.   

    原来to_date(expression,format),format可以有这么多种写法呢!!