今天想设置一下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类型的字段就可以跟日期控件生成的时间字符串直接比较了,非常方便的,如果对查询速度要求高,可以给日期类型的字段创建一个基于函数的索引。
两种方式:设置环境变量;修改注册表。
分享到:
相关推荐
Oracle的NLS_DATE_FORMAT设置(日期格式设置)_ITPUB博客.mhtml
- Oracle数据库的默认时间格式是由`NLS_DATE_FORMAT`参数控制的。该参数在全局范围内定义了DATE类型数据的默认显示格式,对于所有会话都有效。例如,如果设置为`'YYYY-MM-DD HH24:MI:SS'`,则日期将按此格式显示。 ...
ORA-01843 和 NLS_DATE_FORMAT 是在 Oracle 数据库中常见的错误,通常出现在日期处理时,尤其是当你尝试将非标准格式的日期字符串转换为日期类型时。这篇文章主要探讨了如何解决这类问题。 首先,`ORA-01843: 无效...
1. **服务器端初始化参数文件设置**:在服务器的初始化参数文件(如init.ora或spfile.ora)中设定NLS_DATE_FORMAT,如`NLS_DATE_FORMAT = "YYYY-MM-DD"`。此设置只影响服务器端,不会传递到客户端。 2. **客户端...
可以通过设置`NLS_DATE_LANGUAGE`参数来改变输出的语言。 #### 三、其他应用场景 除了上述基本应用外,还有其他一些场景需要注意: 1. **两个日期间的天数**: 可以通过简单的减法运算来计算两个日期之间的天数差。...
TO_DATE (string, format_mask) ``` 其中 `string` 表示需要转换的日期字符串,而 `format_mask` 指定了日期的格式,Oracle数据库根据这个格式解析字符串并将其转换为日期类型。 例如,要将字符串 `'2007-11-02 13:...
TO_DATE(date_string, format_mask) ``` - `date_string`: 需要转换的日期字符串。 - `format_mask`: 字符串的日期格式掩码,用于指导如何解析`date_string`。 ### 格式掩码详解 格式掩码定义了日期字符串的结构...
解决这个问题的方法是明确指定日期字符串的格式,或者根据系统的字符集调整NLS_DATE_FORMAT参数。 总的来说,Oracle的日期处理涉及到多个方面,包括日期和时间的转换、格式化、日期间隔计算、NULL值处理以及日期...
如果不想每次都设置,可以修改系统/用户环境变量,新增一个变量,例如 nls_date_format,值为 YYYY-MM-DD HH24:MI:SS。 补充:修改时间日期的格式并不单是显示上的问题,而是在内部存储的值也会被覆盖。例如: ...
TO_DATE(date_string, format_mask[, nls_date_language]) ``` - `date_string`:这是要转换成日期的字符串。 - `format_mask`:定义了字符串中的日期元素布局。例如,'DD-MON-RRRR' 表示日-月-4位年份,'YYYY-MM-...
Oracle默认接受的日期格式通常为'YYYY-MM-DD HH24:MI:SS',但也可以通过NLS_DATE_FORMAT参数进行自定义。 解决此问题的方法/步骤如下: 1. **系统日期和时间设置**:首先,检查操作系统的日期和时间设置是否正确。...
在处理日期时,Oracle的默认日期格式可能因系统环境而异,可以通过NLS_DATE_FORMAT参数查看和设置。在输入日期时,需要确保格式正确,否则可能会引发错误。例如,对于中文Oracle,月份需要使用'月'标识。SYSDATE函数...
例如,`NLS_DATE_FORMAT` 定义了默认日期格式,`NLS_LANGUAGE` 和 `NLS_TERRITORY` 指定了语言和区域设置。 总结起来,Oracle 系统字符集的查看涉及到多个 SQL 查询和系统表,这对于数据库管理员来说非常重要,因为...
二是修改注册表中的NLS_DATE_FORMAT参数(对于Windows系统),这将影响所有客户端应用程序的日期显示。 在插入日期时间数据到表中时,如果直接使用非转换格式的日期,必须确保它符合当前会话的时间格式,否则插入...
日期格式冲突问题通常与数据库服务器的NLS参数有关,特别是NLS_DATE_FORMAT。如果输入的日期格式与系统默认的NLS_DATE_FORMAT不匹配,会导致错误。解决这个问题的方法是要么调整NLS_DATE_FORMAT,要么在`TO_DATE`...
在 Oracle 中,默认日期格式是 dd-mm-yyyy,但我们可以通过修改 nls_date_format 参数来改变日期格式。例如,我们可以使用 alter session set nls_date_format=‘yyyy-mm-dd’; 语句来将日期格式改为 yyyy-mm-dd。 ...
| 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....
`TO_CHAR(date_variable, 'format_mask')`可以自定义日期的显示格式,如`'J'`表示罗马数字的天数,`'day'`表示完整的星期名。 2. **星期计算**: - `to_char`函数配合日期格式化模型可以查询特定日期是星期几,如`...
Oracle的日期格式可能受到NLS_DATE_FORMAT和NLS_DATE_LANGUAGE参数的影响。不同的字符集可能导致日期的默认显示格式不同。例如,对于US7ASCII字符集,日期格式可能是'01-Jan-01'。可以通过`ALTER SYSTEM`或`ALTER ...