gpt4 book ai didi

sql - 转换为日期 - 文字与格式字符串不匹配

转载 作者:行者123 更新时间:2023-12-02 09:36:16 26 4
gpt4 key购买 nike

我有这个选择:

 select P.DT03_DT as PROPOSAL_DATE,
p.dt02_dt as DATE_OF_JUDGEMENT,
P.DT05_DT as END_DATE,
cast('20140704' as date) as Dt

from imxdb.t_intervenants i
join imxdb.g_indivparam p
on i.refindividu = p.refindividu

where p.type = 'BANCRUPTCY'
AND (to_char(p.dt02_dt, 'yyyymmdd') ='20140704' or
to_char(P.DT05_DT, 'yyyymmdd') = '20140704')

这给了我错误:

ORA-01861: literal does not match format string 01861. 00000 - "literal does not match format string"

但是当我只是将“cast('20140704' as date) as Dt ”这一行注释掉时,它工作正常,为什么?

谢谢

最佳答案

问题出在 NLS_DATE_FORMAT 上。

让我用一个小例子来解释:

我的NLS_DATE_FORMATDD-MON-RR

SQL> SELECT VALUE FROM V$NLS_PARAMETERS WHERE PARAMETER='NLS_DATE_FORMAT';

VALUE
----------------------------------------------------------------
DD-MON-RR

SQL>

我可以在 SQL*Plus 中验证这一点:

SQL> SELECT SYSDATE FROM DUAL;

SYSDATE
---------
23-SEP-14

SQL>

现在,如果我使用未知格式CAST 日期文字,我将收到错误:

SQL> SELECT CAST('20140704' AS DATE) AS DT FROM DUAL;
SELECT CAST('20140704' AS DATE) AS DT FROM DUAL
*
ERROR at line 1:
ORA-01861: literal does not match format string


SQL>

所以,我会给出所需的NLS_DATE_FORMAT,应该没问题:

SQL> SELECT CAST('23-sep-14' AS DATE) AS DT  FROM DUAL;

DT
---------
23-SEP-14

SQL>

其他替代方案,

  • 更改 NLS_DATE_FORMAT
  • 在 session 级别更改它。
  • 或者,您可以使用 TO_DATE 并使用正确的“FORMAT”

它将覆盖特定于区域设置的 NLS 设置

SQL> select to_date('20140704', 'YYYYMMDD') from dual;

TO_DATE('
---------
04-JUL-14

如果您想以所需格式显示,请使用TO_CHAR

关于sql - 转换为日期 - 文字与格式字符串不匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25990173/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com