欢迎投稿

今日深度:

Oracle中不同语言环境导致to_date出错的问题,ora

Oracle中不同语言环境导致to_date出错的问题,oracleto_date


      写了个存储过程,里面用了个函数,函数里有一段to_date(dateFrom, 'yyyy/mm/dd'),运行后发现数据插入错误,插入的数据为“0001/9/14”。感觉莫名其妙,不知道为什么会是这样的数据,经过调试,发现我在测试窗口输入的日期“2014/9/1”在程序中变成了“01-SEP-14”,瞬间恍然大悟,原来是当做01年9月14日了。

      知道了原因就好说了,直接放出解决办法:to_date(to_char(dateFrom, 'yyyy/mm/dd'), 'yyyy/mm/dd')。再次运行,成功记录。


oracle插入日期出错

环境变量 nls_date_language 没有设置。

下面是 没有设置的时候 查询的结果:
SQL> select to_char(sysdate, 'dd-mon-yy') from dual;

TO_CHAR(SYSDAT
--------------
05-10月-11

查询设置的语句
SQL> show parameter nls_date_language;

NAME TYPE VALUE
------------------------------------ ----------- -------
nls_date_language string

修改设置的语句
SQL> alter session set nls_date_language = 'AMERICAN';

会话已更改。

修改设置以后的查询
SQL> select to_char(sysdate, 'dd-mon-yy') from dual;

TO_CHAR(SYSD
------------
05-oct-11

SQL> SELECT TO_DATE('05-oct-11', 'dd-mon-yy') from dual;

TO_DATE('05-
------------
05-OCT-11
 

教大虾ORACLE to_date问题

肯定是因为某笔记录的格式不符合YYYYMMDD。
你应该写个function,找出这种异常资料,并纠正。
create function is_valid_date(p_yyyyymmdd in varchar2) return number is
l_date date;
begin
l_date = to_date(p_yyyyymmdd,'yyyymmdd');
return 1;
exception when others then
return 0;
end;

然后写select语句。
select * from pc_xx where is_valid_date(substr(rydjsj,1,8)) = 0;
 

www.htsjk.Com true http://www.htsjk.com/shujukunews/3525.html NewsArticle Oracle中不同语言环境导致to_date出错的问题,oracleto_date 写了个存储过程,里面用了个函数,函数里有一段to_date(dateFrom, 'yyyy/mm/dd'),运行后发现数据插入错误,插入的数据为“0001/9/14”。...
评论暂时关闭