我想更改 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 的插入日期
提前致谢
如果您使用的是 SQL*Plus,您可以在 glogin.sql 或 login.sql 文件中添加设置 nls_date_format 的命令 - 请参阅这个有用的指南。
但是,如果您的要求是“让 Oracle 接受格式为 MM/DD/YYYY 的插入日期”,为什么不在插入时简单地将字符串转换为日期,例如:
insert into some_table (id, date_col)
values (1, to_date('10/25/2016', '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 = ...
命令更改。
执行 ALTER SYSTEM 而不是 SESSION:
ALTER SYSTEM SET NLS_DATE_FORMAT='MM/DD/YYYY' scope=both;
或者:
ALTER SYSTEM SET NLS_DATE_FORMAT='MM/DD/YYYY';
更多信息在这里。