我试图永久更改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”?
2条答案
按热度按时间dfddblmv1#
在Oracle中,
DATE
是一种二进制数据类型,由7个字节组成,代表世纪,世纪年,月,日,小时,分钟和秒。它总是具有这些组件,并且从不以任何特定的人类可读格式存储。您不能**更改日期的存储方式。
如果您想查看日期值的二进制表示,请用途:
字符串
您看到的是客户端应用程序(即用于查询数据库的程序)选择向您显示该二进制信息。
一些客户端应用程序(即主要是Oracle编写的,包括SQL*Plus、SQL Developer和SQLcl)将根据
NLS_DATE_FORMAT
会话参数设置其默认显示格式。然而,这是特定于那些客户端应用程序的。在内部,数据库使用
NLS_DATE_FORMAT
作为格式模型,将字符串隐式转换为日期,反之亦然。当客户端应用程序请求DATE
数据类型时,数据库发送未格式化的二进制日期表示,并让客户端应用程序处理如何格式化。其他客户端应用程序将有自己的内部配置,并在显示日期时使用该配置来格式化日期。
如果要以特定方式设置日期格式,请执行以下操作:
1.从数据库中检索(未格式化)
DATE
数据类型,并允许客户端应用程序根据其配置对其进行格式化(如果需要,更新每个客户端应用程序的设置);或者是1.不要显示(未格式化的)
DATE
数据类型,并使用TO_CHAR
(或其他函数)将日期格式化为特定格式。r8uurelv2#
正如其他评论中提到的:别浪费时间了!数据库
NLS_DATE_FORMAT
只是客户端显示的默认格式,以防客户端没有定义任何内容。但是,几乎在每种情况下,客户端都设置了NLS_DATE_FORMAT
,因此数据库NLS_DATE_FORMAT
设置被忽略。将客户端配置为使用数据库默认值是相当困难的。对于大多数工具(例如SQL Developer),除非查询数据库NLS值并将此值应用于
ALTER SESSION
命令,否则甚至不可能。请参见设置NLS参数:
NLS参数的设置方法及其优先级
ALTER SESSION
语句设置这份名单甚至还不完整。对于Windows客户端,还必须添加
HKLM\SOFTWARE\ORACLE\KEY_OraClient..
和HKCU\SOFTWARE\ORACLE\KEY_OraClient..
中的注册表NLS值对于sqlplus,您必须考虑
glogin.sql
和login.sql
等。