SELECT  sum(invehicleNum) as value_1, sum(outvehicleNum) as value_2, countDate as name
from t_flow a,t_door b
WHERE  a.iospotID = b.iospotID AND b.area=#area# AND a.countdate between #countdate1# and #countdate2#
                <dynamic>
<isNotEmpty prepend="AND" property="door">
b.door=#door#
</isNotEmpty>
</dynamic>
group by countdate我想知道这段代码里,为什么在mysql里可以正常运行,但在orcle就出错了:ORA-01861   literal   does   not   match   format   string。countdate1和countdate2都是通过日历从页面上选择返回的,countdate是数据库里的字段,类型是date,希望各位解答!

解决方案 »

  1.   

    -- mysql 里的日期字段,可以直接进行比较,例如:
    where date_column >= '2011-08-01' and date_column < '2011-08-07'-- 而 oracle 里的日期字段,需要先用 to_date()函数将字符串转换成日期类型,再加以比较,例如:where date_column >= to_date('2011-08-01','yyyy-mm-dd') 
      and date_column < to_date('2011-08-07','yyyy-mm-dd')-- 我想:这就是你出错的主要原因!-- 记住:不是任何SQL语句都可以不加修改地从mysql移植到oracle
      

  2.   

    我也试过这些方法,比如把那句话改为 
    a.countdate between to_date(#countdate1#,'yyyy-mm-dd') and to_date(#countdate2#.'yyyy-mm-dd'),
    但是依然有错误,错误为date format picture ends before converting entire input string
      

  3.   

    你从日历选的不还是字符串么,日历只是java写的一个小程序,按照一定格式把字符展示了,
    先要搞清楚java里没有date类型。而数据库里是date类型的,你要转换为date才能用。你下边的报错是因为日期格式:比如说你的字符串传过来是 2000-01-01 ,那么你要写成to_Date(#countdate1#,'yyyy-mm-dd')
    如果是2000/01/01 ,就写成to_Date(#countdate1#,'yyyy/mm/dd')以此类推
      

  4.   

    你看看你传入的日期是什么格式的。
    然后再到后台进行to_date()操作。你的错误信息就是说你传入的日期格式不正确。