关于NLS_DATE_FORMAT的设置

本文介绍如何永久更改Oracle数据库中的日期格式。提供了多种方法,包括修改glogin.sql文件、更新Windows注册表以及配置UNIX环境变量等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Oracle的日期格式默认设置是DD-MON-YY,很多时候我们需要修改这种格式以满足我们的需求。
    可以通过设置NLS_DATE_FORMAT来改变日期格式,为了让这种改变永久生效,介绍下面的几种方法:
    1、修改glogin.sql文件,这个文件的路径:
    Windows下,%ORACLE_HOME%\sqlplus\admin
    UNIX下,$ORACLE_HOME/sqlplus/admin
    在文件中加上:alter session set nls_date_format='yyyy-mm-ddhh24:mi:ss';
    2、修改注册表(Windows平台下)
    开始 =》运行=》regedit=》HKEY_LOCAL_MACHINE=》SOFTWARE=》ORACLE=》HOME0 =》新建字符串值NLS_DATE_FORMAT,并设置其值为:YYYY-MM-DD:HH24:MI:SS
    3、修改用户环境变量配置文件(UNIX平台下),加上
    
exportNLS_LANG=AMERICAN
    exportNLS_DATE_FORMAT='YYYY-MM-DDHH24:MI:SS'
    有时候只设置了NLS_DATE_FORMAT,而不设置NLS_LANG可能日期格式不会改变(参考RollingPig的文章),这个可能跟平台及Shell类型有关系。

   rman会话中设置nls_date_format和nls_lang

run {

......

sql 'alter session set NLS_DATE_FORMAT="YYYY-MM-DDHH24:MI:SS"';

sql 'alter sessionset NLS_LANGUAGE="AMERICAN"';

......

}

### 修改 Oracle 数据库中的 `NLS_DATE_FORMAT` 参数 `NLS_DATE_FORMAT` 是 Oracle 数据库中用于控制日期类型(DATE)的默认显示和输入格式的参数。修改该参数可以影响数据库会话中的日期格式,但需要注意其作用范围(实例级别、会话级别、客户端环境等)。 #### 1. **修改会话级别的 `NLS_DATE_FORMAT`** 在 SQL*Plus 或 SQL Developer 等工具中,可以通过以下语句修改当前会话的日期格式: ```sql ALTER SESSION SET NLS_DATE_FORMAT = 'YYYY-MM-DD HH24:MI:SS'; ``` 此修改仅对当前会话有效,会话结束后将失效[^3]。 #### 2. **在 `glogin.sql` 文件中设置全局默认格式** 为了使所有会话默认使用特定的日期格式,可以在 `$ORACLE_HOME/sqlplus/admin/glogin.sql` 文件中添加以下语句: ```sql ALTER SESSION SET NLS_DATE_FORMAT = 'YYYY-MM-DD HH24:MI:SS'; ``` 这样,每次启动 SQL*Plus 时都会自动应用该格式[^3]。 #### 3. **通过客户端环境变量 `NLS_LANG` 设置** 如果设置了客户端环境变量 `NLS_LANG`,则会话的 `NLS_DATE_FORMAT` 将继承客户端的设置。如果未设置 `NLS_DATE_FORMAT`,则默认使用 `DD-MON-YY` 格式。 例如,在 Linux 系统中,可以在终端中设置: ```bash export NLS_LANG=AMERICAN_AMERICA.AL32UTF8 ``` 在 Windows 系统中,可以在注册表中设置 `NLS_LANG`: ``` HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\KEY_<Oracle_Home_Name> ``` 添加字符串值 `NLS_LANG`,并设置为 `AMERICAN_AMERICA.AL32UTF8`[^2]。 #### 4. **修改数据库实例级别的 `NLS_DATE_FORMAT`** 要修改数据库实例级别的 `NLS_DATE_FORMAT`,需要在初始化参数文件(`init.ora` 或 `spfile`)中设置: ```ini NLS_DATE_FORMAT='YYYY-MM-DD' ``` 然后重启数据库实例以使更改生效: ```sql SHUTDOWN IMMEDIATE; STARTUP; ``` 注意:此方法通常不推荐,因为大多数情况下应通过客户端或会话级设置来控制日期格式[^2]。 #### 5. **通过 JDBC 设置会话级别的 `NLS_DATE_FORMAT`** 在使用 JDBC 连接 Oracle 数据库时,可以通过连接字符串或执行 SQL 语句来设置会话级别的 `NLS_DATE_FORMAT`。 ##### 方法一:在连接后执行 SQL ```java Connection conn = DriverManager.getConnection(url, username, password); Statement stmt = conn.createStatement(); stmt.execute("ALTER SESSION SET NLS_DATE_FORMAT = 'YYYY-MM-DD HH24:MI:SS'"); ``` ##### 方法二:通过连接属性设置 某些 JDBC 驱动支持在连接 URL 中指定 NLS 参数,例如: ```java jdbc:oracle:thin:@//host:port/service_name?internal_logon=as SYSDBA&oracle.jdbc.timezoneAsRegion=false ``` 但 `NLS_DATE_FORMAT` 通常需要在连接后通过 SQL 设置[^4]。 #### 6. **Windows 注册表设置** 在 Windows 系统中,可以通过注册表设置 `NLS_DATE_FORMAT`: ``` HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\KEY_<Oracle_Home_Name> ``` 添加字符串值 `NLS_DATE_FORMAT`,并设置为 `YYYY-MM-DD`。 但需要注意,如果 `NLS_LANG` 未设置,或者某些工具(如 SQL Developer)未继承注册表设置,可能会导致格式未生效[^4]。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值