`

NLS_DATE_FORMAT参数

阅读更多
   今天想设置一下NLS_DATE_FORMAT参数来更改一下date参数的输出格式,但是遇到了问题:

SQL> select sysdate from dual;

SYSDATE
---------
07-NOV-08

    刚开始SPFILE里没有配置NLS_DATE_FORMAT参数的,用了ALTER SYSTEM ... SCOPE=SPFILE居然报错:

SQL> alter system set nls_date_format='YYYY-MM-DD' scope=spfile;

alter system set nls_date_format='YYYY-MM-DD' scope=spfile
ORA-02096: specified initialization parameter is not modifiable with this option
 
    但是使用ALTER SESSION是可以的:

SQL> alter session set nls_date_format='yyyy-mm-dd';

Session altered.

SQL> select sysdate from dual;

SYSDATE
----------
2008-11-07

    在查阅文档后,发现这个参数确实不能通过ALTER SYSTEM命令来修改:

You can alter the default value of NLS_DATE_FORMAT by:
■ Changing its value in the initialization parameter file and then restarting the
instance
■ Using an ALTER SESSION SET NLS_DATE_FORMAT statement
                       --《Globalization Support Guide》


    修改了SPFILE,加进了NLS_DATE_FORMAT参数:

SQL> select name,value,isspecified from v$spparameter where name='nls_date_format';

NAME             VALUE         ISSPEC
----------       ----------    -------------------------
nls_date_format  YYYY-MM-DD    TRUE


    虽然Oracle里的参数换了,但是查询后的显示结果任然是一样的:

SQL> select sysdate from dual;

SYSDATE
---------
07-NOV-08

    WINDOWS系统,要修改注册表,machine/software/oracle/home0里把nls_date_format的值改成yyyy-mm-dd,没有的话就新建一个字符串值(linux中,在.bash_profile中加入export NLS_DATE_FORMAT,Windows也可以设置环境变量),查询正常:

SQL> select sysdate from dual;

SYSDATE
----------
2008-11-07


    看来NLS_DATE_FORMAT参数主要还是受到OS的影响,每次登录时会将OS的NLS_DATE_FORMAT参数加载进去。
    基本上除了修改环境变量就只能通过alter session来修改了,暂时还没有找到好一点的办法。


    要注意并不单是显示上的问题,而是在内部存储的值也会被覆盖:

SQL> select to_date(to_char(sysdate,'yyyy-mm-dd')) from dual;
select to_date(to_char(sysdate,'yyyy-mm-dd')) from dual
               *
ERROR at line 1:
ORA-01861: literal does not match format string

    在没有修改环境变量或session参数时,这个语句是无法执行的。修改后可以执行:

SQL> select to_date(to_char(sysdate,'yyyy-mm-dd')) from dual;

TO_DATE(TO
----------
2008-11-10

注:把参数NLS_DATE_FORMAT设置成yyyy-mm-dd,查询的过滤条件中date类型的字段就可以跟日期控件生成的时间字符串直接比较了,非常方便的,如果对查询速度要求高,可以给日期类型的字段创建一个基于函数的索引。

两种方式:设置环境变量;修改注册表。
分享到:
评论
1 楼 christ_shen 2011-11-09  
哥, 你是神,我找了N久,结果是注册表的问题,一针见血

相关推荐

    Oracle的NLS_DATE_FORMAT设置(日期格式设置)_ITPUB博客.mhtml

    Oracle的NLS_DATE_FORMAT设置(日期格式设置)_ITPUB博客.mhtml

    设置ORACLE时间格式

    - Oracle数据库的默认时间格式是由`NLS_DATE_FORMAT`参数控制的。该参数在全局范围内定义了DATE类型数据的默认显示格式,对于所有会话都有效。例如,如果设置为`'YYYY-MM-DD HH24:MI:SS'`,则日期将按此格式显示。 ...

    如何解决ORA-01843与NLS_DATE_FORMAT问题

    ORA-01843 和 NLS_DATE_FORMAT 是在 Oracle 数据库中常见的错误,通常出现在日期处理时,尤其是当你尝试将非标准格式的日期字符串转换为日期类型时。这篇文章主要探讨了如何解决这类问题。 首先,`ORA-01843: 无效...

    Oracle的NLS参数在开发与维护中的设置问题分析.pdf

    1. **服务器端初始化参数文件设置**:在服务器的初始化参数文件(如init.ora或spfile.ora)中设定NLS_DATE_FORMAT,如`NLS_DATE_FORMAT = "YYYY-MM-DD"`。此设置只影响服务器端,不会传递到客户端。 2. **客户端...

    Oracle 中的 TO_DATE 和 TO_CHAR 函数

    可以通过设置`NLS_DATE_LANGUAGE`参数来改变输出的语言。 #### 三、其他应用场景 除了上述基本应用外,还有其他一些场景需要注意: 1. **两个日期间的天数**: 可以通过简单的减法运算来计算两个日期之间的天数差。...

    Oracle_to_date

    TO_DATE (string, format_mask) ``` 其中 `string` 表示需要转换的日期字符串,而 `format_mask` 指定了日期的格式,Oracle数据库根据这个格式解析字符串并将其转换为日期类型。 例如,要将字符串 `'2007-11-02 13:...

    ORACLE 关于时间函数to_date 的运用

    TO_DATE(date_string, format_mask) ``` - `date_string`: 需要转换的日期字符串。 - `format_mask`: 字符串的日期格式掩码,用于指导如何解析`date_string`。 ### 格式掩码详解 格式掩码定义了日期字符串的结构...

    oracle date函数.docx

    解决这个问题的方法是明确指定日期字符串的格式,或者根据系统的字符集调整NLS_DATE_FORMAT参数。 总的来说,Oracle的日期处理涉及到多个方面,包括日期和时间的转换、格式化、日期间隔计算、NULL值处理以及日期...

    sqlplus日期格式和中文乱码解决文.pdf

    如果不想每次都设置,可以修改系统/用户环境变量,新增一个变量,例如 nls_date_format,值为 YYYY-MM-DD HH24:MI:SS。 补充:修改时间日期的格式并不单是显示上的问题,而是在内部存储的值也会被覆盖。例如: ...

    Oracle中TO_DATE、TO_CHAR,Oracle函数大全

    TO_DATE(date_string, format_mask[, nls_date_language]) ``` - `date_string`:这是要转换成日期的字符串。 - `format_mask`:定义了字符串中的日期元素布局。例如,'DD-MON-RRRR' 表示日-月-4位年份,'YYYY-MM-...

    怎样解决oracle报错is not a valid date and time.pdf

    Oracle默认接受的日期格式通常为'YYYY-MM-DD HH24:MI:SS',但也可以通过NLS_DATE_FORMAT参数进行自定义。 解决此问题的方法/步骤如下: 1. **系统日期和时间设置**:首先,检查操作系统的日期和时间设置是否正确。...

    管理信息化ORACLE完美Oracle数据库知识学习文档总汇.pdf

    在处理日期时,Oracle的默认日期格式可能因系统环境而异,可以通过NLS_DATE_FORMAT参数查看和设置。在输入日期时,需要确保格式正确,否则可能会引发错误。例如,对于中文Oracle,月份需要使用'月'标识。SYSDATE函数...

    Oracle 系统字符集查看实例.pdf

    例如,`NLS_DATE_FORMAT` 定义了默认日期格式,`NLS_LANGUAGE` 和 `NLS_TERRITORY` 指定了语言和区域设置。 总结起来,Oracle 系统字符集的查看涉及到多个 SQL 查询和系统表,这对于数据库管理员来说非常重要,因为...

    oracle内部日期查询.pdf

    二是修改注册表中的NLS_DATE_FORMAT参数(对于Windows系统),这将影响所有客户端应用程序的日期显示。 在插入日期时间数据到表中时,如果直接使用非转换格式的日期,必须确保它符合当前会话的时间格式,否则插入...

    数据库日期格式处理(Oracle).pdf

    日期格式冲突问题通常与数据库服务器的NLS参数有关,特别是NLS_DATE_FORMAT。如果输入的日期格式与系统默认的NLS_DATE_FORMAT不匹配,会导致错误。解决这个问题的方法是要么调整NLS_DATE_FORMAT,要么在`TO_DATE`...

    oracle学习心得.doc

    在 Oracle 中,默认日期格式是 dd-mm-yyyy,但我们可以通过修改 nls_date_format 参数来改变日期格式。例如,我们可以使用 alter session set nls_date_format=‘yyyy-mm-dd’; 语句来将日期格式改为 yyyy-mm-dd。 ...

    ora-01460 错误原因分析

    | NLS_DATE_FORMAT | DD-MON-RR | | NLS_DATE_LANGUAGE | AMERICAN | | NLS_CHARACTERSET | ZHS32GB18030 | | NLS_SORT | BINARY | | NLS_TIME_FORMAT | HH.MI.SSXFFAM | | NLS_TIMESTAMP_FMT | DD-MON-RRHH.MI....

    oracle日期处理完全版

    `TO_CHAR(date_variable, 'format_mask')`可以自定义日期的显示格式,如`'J'`表示罗马数字的天数,`'day'`表示完整的星期名。 2. **星期计算**: - `to_char`函数配合日期格式化模型可以查询特定日期是星期几,如`...

    oracle中to_date详细用法示例(oracle日期格式转换)

    Oracle的日期格式可能受到NLS_DATE_FORMAT和NLS_DATE_LANGUAGE参数的影响。不同的字符集可能导致日期的默认显示格式不同。例如,对于US7ASCII字符集,日期格式可能是'01-Jan-01'。可以通过`ALTER SYSTEM`或`ALTER ...

Global site tag (gtag.js) - Google Analytics