oracle 将数据库日期格式从DD-MON-RR更改为DD/MM/YYYY

vyu0f0g1  于 2023-08-03  发布在  Oracle
关注(0)|答案(2)|浏览(149)

我试图永久更改Oracle数据库的日期格式,以便它以“DD/MM/YYYY”格式显示日期。目前,日期显示为“24-04-02”,这不是我想要的格式。
我已经尝试使用以下命令:

ALTER SYSTEM set NLS_DATE_FORMAT='DD/MM/YYYY';
  ALTER SYSTEM set NLS_DATE_FORMAT='DD/MM/YYYY' SCOPE=SPFILE;

字符串
但是,这些命令似乎对日期格式没有任何影响。
我不想使用TO_CHAR(),因为我不想改变特定查询的格式,我也不想使用ALTER SESSION,因为我不想每次启动新会话时都要改变格式。
如何将Oracle数据库的日期格式永久更改为“DD/MM/YYYY”?

dfddblmv

dfddblmv1#

在Oracle中,DATE是一种二进制数据类型,由7个字节组成,代表世纪,世纪年,月,日,小时,分钟和秒。它总是具有这些组件,并且从不以任何特定的人类可读格式存储。
您不能**更改日期的存储方式。
如果您想查看日期值的二进制表示,请用途:

SELECT DUMP(date_column) FROM table_name;

字符串
您看到的是客户端应用程序(即用于查询数据库的程序)选择向您显示该二进制信息。
一些客户端应用程序(即主要是Oracle编写的,包括SQL*Plus、SQL Developer和SQLcl)将根据NLS_DATE_FORMAT会话参数设置其默认显示格式。
然而,这是特定于那些客户端应用程序的。在内部,数据库使用NLS_DATE_FORMAT作为格式模型,将字符串隐式转换为日期,反之亦然。当客户端应用程序请求DATE数据类型时,数据库发送未格式化的二进制日期表示,并让客户端应用程序处理如何格式化。
其他客户端应用程序将有自己的内部配置,并在显示日期时使用该配置来格式化日期。
如果要以特定方式设置日期格式,请执行以下操作:
1.从数据库中检索(未格式化)DATE数据类型,并允许客户端应用程序根据其配置对其进行格式化(如果需要,更新每个客户端应用程序的设置);或者是
1.不要显示(未格式化的)DATE数据类型,并使用TO_CHAR(或其他函数)将日期格式化为特定格式。

r8uurelv

r8uurelv2#

正如其他评论中提到的:别浪费时间了!数据库NLS_DATE_FORMAT只是客户端显示的默认格式,以防客户端没有定义任何内容。但是,几乎在每种情况下,客户端都设置了NLS_DATE_FORMAT,因此数据库NLS_DATE_FORMAT设置被忽略。
将客户端配置为使用数据库默认值是相当困难的。对于大多数工具(例如SQL Developer),除非查询数据库NLS值并将此值应用于ALTER SESSION命令,否则甚至不可能。
请参见设置NLS参数:
NLS参数的设置方法及其优先级

  • 1:(最高)在SQL函数中显式设置
  • 2:由ALTER SESSION语句设置
  • 3:设置为环境变量
  • 4:在初始化参数文件中指定
  • 5:(最低)创建数据库时指定的默认值

这份名单甚至还不完整。对于Windows客户端,还必须添加HKLM\SOFTWARE\ORACLE\KEY_OraClient..HKCU\SOFTWARE\ORACLE\KEY_OraClient..中的注册表NLS值
对于sqlplus,您必须考虑glogin.sqllogin.sql等。

相关问题