无法永久更改 SYSDATE 格式

Can't permanently change SYSDATE Format

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

我用了一个简单的代码(谢谢google)

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

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

有什么帮助吗?

更改的主要目的是让 Oracle 接受格式为 MM/DD/YYYY

的插入日期

提前致谢

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

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

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

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

分别。

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 = ...命令更改。

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

但是,如果您的要求是"to let Oracle accept insert date with the format MM/DD/YYYY",为什么不在插入时简单地将字符串转换为日期,例如:

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

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

执行 ALTER SYSTEM 而不是 SESSION:

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

或:

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

更多信息here