日期与数字字符隐示转换
SQL> select * from t001 where edate='2013-10-07 00:00:00';
select * from t001 where edate='2013-10-07 00:00:00'
*
ERROR at line 1:
ORA-01861: literal does not match format string
SQL> alter session set nls_date_format='YYYY-mm-dd hh24:mi:ss';
Session altered.
SQL> select * from t001 where edate='2013-10-07 00:00:00';
no rows selected
number隐士转换为varchar2 然后varchar2隐士转换为date
这个隐士转换很可能会导致索引失效
所以where过滤时两边数据类型最好一样
这个隐士转换很可能会导致索引失效
所以where过滤时两边数据类型最好一样
查看 修改 当前oracle时间的格式
查看当前oracle时间的格式select * from nls_session_parameters where parameter = ‘NLS_DATE_FORMAT’;
修改当前session的format
alter session set NLS_DATE_FORMAT=’YYYY-MM-DD HH24:MI:SS’;
windows修改时间格式并保存
客户端的注册表HKEY_LOCAL_MACHINE->SOFTWARE->ORACLE->HOME0中,如无默认的日期格式,则“新建”->“字符串”,重命名为“NLS_DATE_FORMAT”(注意引号内的字符应大写),并赋值为如:yyyy-mm-dd hh24:mi:ss, 可直接使用,而不需要重启Oracle。
不设置这个参数的话读取的是v$nls_parameters数据库的系统参数nls_date_format
文档查看:Oracle 官方文档 关键字 implicit