您的位置:首页 > 数据库 > Oracle

关于oracle多语言环境下to_date时间转换问题

2011-02-23 19:43 411 查看


date_v date;

date_v := to_date('2010/11/16');--或'2010/11/16'

同一个服务器,不同oracle clinet 不一定都行得通。

原因

不指定转换字符串的情况下,oracle使用既定的格式串进行日期转换操作,执行SELECT * FROM NLS_SESSION_PARAMETERS;

察看NLS信息,其中NLS_TIMESTAMP_FORMAT是指当前使用的格式化字符串。

(中文环境下):是"DD-MON-RR HH.MI.SSXFF AM",

其中,DD代表日,RR代表年mon代表月,所以to_date('2010/11/16')==to_date('2010/11/16','DD-MON-RR'),

MON在NLS_LANGUAGE为AMERICAN的情况下只识别Nov而不是别11,所以转换失败。

(日文环境下):是"RR-MM-DD HH24.MI.SSXFF",

所以to_date('2010/11/16')==to_date('2010/11/16',' RR-MM-DD'),

这样,在项目中的使用的日期格式包括SRC中format后的日期格式全部符合‘2010/11/16',所以执行正常。

解决

常用的解决方案啊如下三个方法:

1,可以以DBA登录,执行:alter session set nls_date_format=’YYYY-MM-DD’

不过只是暂时会话性质的修改,服务器重启就还原了。

2、永久修改可以:

定位注册表到HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\KEY_OraDb10g_home1,然后新建一个reg_sz,名为NLS_DATE_FORMAT,值为YYYY-MM-DD

3、最常用的就是我们项目中的解决方案:

to_date有个重载方法,提供转换需要的format。

无论NLS_DATE_FORMAT是什么,select to_date('2010/11/15','yyyy/mm/dd') from dual--ok。

注:感谢我的同事DICK的调查,谢谢。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: