如何解决ORA-01843与NLS_DATE_FORMAT问题
ORA 问题 如何 解决 Date format nls
2023-06-13 09:14:41 时间
在OracleSQL的where子句中传入字符类型参数"19-11月-08",使得可以直接和日期类型比较,或者转换一下同日期类型比较。
如果传入的字符格式和NSL_DATE_FORMAT一致,那么可以不转换直接用,否则会报ORA-01861错误。如果转换得不正确,则可能会报ORA-01843或其他错误。
例如:
Trc代码
SQL>
electcount(*)fromdba_objectswherecreated>to_date("2008-12-01");
selectcount(*)fromdba_objectswherecreated>to_date("2008-12-01")
第1行出现错误:
ORA-01861:文字与格式字符串不匹配
Trc代码
SQL>
selectcount(*)fromdba_objectswherecreated>to_date("19-11月-08","mm-dd-
yyyy");
selectcount(*)fromdba_objectswherecreated>to_date("19-11月-08","mm-dd-yyyy"
)
第1行出现错误:
ORA-01843:无效的月份
不能识别的字符串和格式转换不对的字符串测试时会出现这样的错误。
使用to_date转换的格式字符串主要为"DD-MON-RR"/"DD-MON-RRRR"或"YYYY-MM-DD"/"YY-MM-DD"。
如果能识别,正确的结果应是这样。
SQL>
selectcount(*)fromdba_objectswherecreated>"19-11月-08";
COUNT(*)
----------
4199
这个格式和会话的NLS_DATE_FORMAT参数值相关。
selectSYS_CONTEXT("USERENV","NLS_DATE_FORMAT")DF,SYS_CONTEXT("USERENV","NLS_DATE_LANGUAGE")DLfromdual
DFDL
----------------------------------------
DD-MON-RRSIMPLIFIEDCHINESE
我们在会话级别修改一下这个参数的值。
SQL>altersessionsetnls_date_format="YYYY-MM-DD";
会话已更改。
SQL>
selectcount(*)fromdba_objectswherecreated>"19-11月-08";
selectcount(*)fromdba_objectswherecreated>"19-11月-08"
第1行出现错误:
ORA-01861:文字与格式字符串不匹配
这样,原来正确的操作就不对了。使用符合NLS_DATE_FORMAT格式的字符串则可以了。
SQL>
selectcount(*)fromdba_objectswherecreated>"2008-12-01";
这个参数和应用的环境也有关系,有的应用会自动修改这个参数值。因此,测试工作最好放到sqlplus中进行。
数据库级别上这个参数的值是固定不变的,如下所示:
Trc代码
SQL>
select*fromv$nls_parameters;
PARAMETERVALUE
----------------------------------------------------------------------
NLS_LANGUAGESIMPLIFIEDCHINESE
NLS_TERRITORYCHINA
NLS_CURRENCY¥
NLS_ISO_CURRENCYCHINA
NLS_NUMERIC_CHARACTERS.,
NLS_CALENDARGREGORIAN
NLS_DATE_FORMATDD-MON-RR
NLS_DATE_LANGUAGESIMPLIFIEDCHINESE
NLS_CHARACTERSETZHS16GBK
NLS_SORTBINARY
NLS_TIME_FORMATHH.MI.SSXFFAM
NLS_TIMESTAMP_FORMATDD-MON-RRHH.MI.SSXFFAM
NLS_TIME_TZ_FORMATHH.MI.SSXFFAMTZR
NLS_TIMESTAMP_TZ_FORMATDD-MON-RRHH.MI.SSXFFAMTZR
NLS_DUAL_CURRENCY¥
NLS_NCHAR_CHARACTERSETAL16UTF16
NLS_COMPBINARY
NLS_LENGTH_SEMANTICSBYTE
NLS_NCHAR_CONV_EXCPFALSE
已选择19行。
NLS_DATE_LANGUAGE是"SIMPLIFIEDCHINESE",即简体中文。所以月份值是中文如"11月"。
相关文章
- 连接远程服务器提示ora 12154,EasyConnect出现ORA-12154(无法解析指定的连接标示符)错误的解决…
- oracle连接出现ora-12154,与虚拟机Oracle连接出现ora-12154问题的解决方法
- ORA-19288: XPST0017 – invalid number of arguments to function – string ORACLE 报错 故障修复 远程处理
- ORA-23293: Cannot rename a column which is part of a join index ORACLE 报错 故障修复 远程处理
- ORA-23439: refresh group template already exists ORACLE 报错 故障修复 远程处理
- ORA-29815: object being associated is not present ORACLE 报错 故障修复 远程处理
- ORA-38871: cannot enable flashback before open resetlogs after incomplete recovery. ORACLE 报错 故障修复 远程处理
- ORA-44303: service name exists ORACLE 报错 故障修复 远程处理
- ORA-48108: invalid value given for the diagnostic_dest init.ora parameter ORACLE 报错 故障修复 远程处理
- ORA-48316: relation [string] unavailable or cannot be created ORACLE 报错 故障修复 远程处理
- ORA-55339: a virtual model already exists for the specified model-rulebase combination ORACLE 报错 故障修复 远程处理
- ORA-56725: Could not spawn additional calibration slaves ORACLE 报错 故障修复 远程处理
- ORA-63001: file error during move operation ORACLE 报错 故障修复 远程处理
- ORA-12205: TNS:could not get failed addresses ORACLE 报错 故障修复 远程处理
- ORA-12323: unable to open database (link name string) ORACLE 报错 故障修复 远程处理
- ORA-16245: change db_name to string in the server-side parameter file (SPFILE) ORACLE 报错 故障修复 远程处理
- ORA-16252: Rebuild operation not permitted ORACLE 报错 故障修复 远程处理
- ORA-16282: operation not permitted during rolling upgrade ORACLE 报错 故障修复 远程处理
- ORA-18123: XUDY0024 – Updating expression introduces a namespace conflict ORACLE 报错 故障修复 远程处理
- oracle表空间不足ORA-01653的问题: unable to extend table
- Oracle ORA 07445 evaopn2()+128错误问题的解决方案
- oracle 11g导出数据时报ORA 1455错误的处理方法
- 错误搞清楚Oracle中的Ora错误(oracle中ora)
- Oracle ORA配置解锁更高效的运行体验(oracle ora配置)
- 利用Oracle ORA命令简化的系统管理(oracle ora命令)
- 快速步入正确的道路Oracle 11g ORA快速走上正确之路(oracle11 ora)