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 根本不管用,怎么解决呢/
第一次见到这种写法,between还跟模糊匹配结合啊!既然INSERTTIME是字符串,直接用like不就得 INSERTTIME like '2011032916%'
可以用: 字段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')
你这是什么意思 想查某个时间段的吗?
可以用
t.INSERTTIME Between to_date('2011032916','yyyymmddhh24') And to_date('2011042916','yyyymmddhh24')
但是这样不能模糊查询
你也可以用
t.INSERTTIME >= '2011032916' And t.INSERTTIME <= '2011032916'
既然是时间段 不明白你为什么还要模糊查询
我用这个:INSERTTIME >= to_date('201103301010','yyyymmddhh24miss') And INSERTTIME <= to_date('201103302040','yyyymmddhh24miss')
进行查询,SQL 语句查询正确,结果也查出来了,但是后面又出错了,提示“ORA-01861: 文字与格式字符串不匹配”,我核实了一下,是数据表中的数据的日期格式与我格式化日期不对应造成的,数据表的数据是精确到了分钟,例如:“201103302040”,后面没有秒,我试了好几种写法,很纳闷,还是没有通过,请各位赐教一下、
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;--注意:通配符%的使用,和转义字符的使用