.Net执行SQL时报的错误,我的查询SQL时间条件是:"时间 >= '2010-5-1' and 时间 <= sysdate",环境变量NLS_DATE_FORMAT都配好了,变量值为YYYY-MM-DD HH24:MI:SS。本机调试执行没问题,Toad和PL/SQL执行也都没问题,但是部署到IIS上执行就报错:ORA-01861: literal does not match format string,条件改成"时间 >= to_date('2010-5-1','YYYY-MM-DD') "就没事。为什么本机调试没问题,部署到IIS就会报错(部署也在我本机)?
顺便问下"时间 >= to_date('2010-5-1','YYYY-MM-DD')"这样查破坏了时间索引吗,不是只要左边查询字段(时间)不加函数处理就不会影响索引吗?那为什么速度差别这么大?不加to_date()查询只要2,3秒,但是加上后就70,80秒的样子
1). ORA-01861: 文字与格式字符串不匹配
2). 必须指定日期格式
to_date('2010-05-11 14:20:24' , 'yyyy-mm-dd hh24:mi:ss')
3). 比较时间也可以将数据的时间字段to_char('时间','yyyy-mm-dd hh24:mi:ss').变成字符串,再去按字符串比较.
当然你的字符串'2010-5-1'也要to_char(to_date('2010-5-1','yyyy-mm-dd hh24:mi:ss'),'yyyy-mm-dd hh24:mi:ss').
时间 >= '2010-5-1' and 时间 <= sysdate,这里出错是因为数据类型不匹配引起的吧,不太了解Oracle。刚查了一下,网上出现这个错误的还不少。
可以使用OracleParameter。
public static DataTable GetOperateLogByOperateTime(string beginTime, string endTime)
{
string sql = "";
sql += "select ol.*,mi.ManagerLoginName from OperateLog ol";
sql += " inner join sysManagerInfo mi on mi.ManagerId = ol.ManagerId";
sql += " where ol.OperateTime between to_date('" + beginTime + "','yyyy-MM-dd hh24:mi:ss')";
sql += " and to_date('" + endTime + "','yyyy-MM-dd hh24:mi:ss') order by ol.OperateId desc";
return DBHelper.GetDataTable(sql);
}
我试过了很多方法,在oracle当中,必需要使用to_date()方法才能够正确地查询数据
如有其它方法,请指教