无法永久更改SYSDATE格式

时间:2016-10-25 09:52:49

标签: oracle sysdate

我想更改Oracle的日期格式 现在它是DD / MM / YYYY,我想把它改成MM / DD / YYYY

我使用了一个简单的代码(谢谢谷歌)

ALTER SESSION SET NLS_DATE_FORMAT = 'MM/DD/YYYY HH24:MI';
select sysdate from dual;

问题是当我断开连接并重新连接时,更改将被取消,

任何帮助?

更改的主要内容是让Oracle接受格式为MM / DD / YYYY的插入日期

提前致谢

4 个答案:

答案 0 :(得分:1)

正如您在命令中看到的那样,您正在改变会话。因此,重新连接后,您将获得获取服务器设置的新会话。为了更好地理解,请阅读: https://docs.oracle.com/cd/A87860_01/doc/server.817/a76966/ch2.htm

我建议始终使用to_date(data_string,'MM/DD/YYYY HH24:MI')插入日期,而不要相信NLS不会被更改。

答案 1 :(得分:1)

如果您正在使用SQL * Plus,则可以添加命令以在glogin.sql或login.sql文件中设置nls_date_format - 请参阅this helpful guide

但是,如果您的要求是让Oracle接受格式为MM / DD / YYYY"的插入日期,为什么不简单地将字符串转换为插入日期时的日期,例如:

insert into some_table (id, date_col)
values (1, to_date('10/25/2016', 'mm/dd/yyyy'));

这样,您就不必担心格式化问题;它将自动采用正确的格式。

答案 2 :(得分:0)

您也可以在注册表中设置此格式

HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\KEY_{Oracle Home Name}\NLS_DATE_FORMAT

RESP。

HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\ORACLE\KEY_{Oracle Home Name}\NLS_DATE_FORMAT

从命令行执行此操作的示例:

reg add "HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\KEY_OraClient11g_home1" /v NLS_DATE_FORMAT /t REG_SZ /d "MM/DD/YYYY HH24:MI" /f

另一种可能性是将值设置为环境变量,例如:

set NLS_DATE_FORMAT="MM/DD/YYYY HH24:MI"

注意,环境变量优先于注册表设置。

但请注意,这些只是定义NLS_DATE_FORMAT默认值。它可以随时通过ALTER SESSION SET NLS_DATE_FORMAT = ...命令进行更改。

答案 3 :(得分:0)

执行ALTER SYSTEM代替SESSION:

ALTER SYSTEM SET NLS_DATE_FORMAT='MM/DD/YYYY' scope=both;

或:

ALTER SYSTEM SET NLS_DATE_FORMAT='MM/DD/YYYY';

更多信息here