sql請求是:
select DRCR_CR_DT
from PS_DRCR
where
TRUNC(DRCR_CR_DT)= TO_DATE('1/4/2022','dd/mon/yyyy');
DRCR_CR_DT 的型別是:DATE
DRCR_CR_DT 包含類似這樣的內容:1/4/2022 2:02:54 PM
謝謝你的回答
uj5u.com熱心網友回復:
該錯誤意味著這DRCR_CR_DT是一個字串,而不是真正的日期 - 所以它的資料型別是 VARCHAR2 而不是 DATE 如你所說。
create table PS_DRCR (DRCR_CR_DT) AS
select '1/4/2022 2:02:54 PM' from dual;
select DRCR_CR_DT
from PS_DRCR
where
TRUNC(DRCR_CR_DT)= TO_DATE('1/4/2022','dd/mon/yyyy');
ORA-00932: inconsistent datatypes: expected NUMBER got DATE
如果它真的是一個日期,它會起作用 - 至少,格式模型固定為@Littlefoot 指出的。
如果您堅持將其作為字串(這是一個錯誤的資料模型),那么您需要在截斷之前將其轉換為日期:
select DRCR_CR_DT
from PS_DRCR
where
TRUNC(TO_DATE(DRCR_CR_DT, 'DD/MM/YYYY HH:MI:SS AM')) = TO_DATE('1/4/2022','dd/mm/yyyy');
DRCR_CR_DT
-------------------
1/4/2022 2:02:54 PM
您還可以與日期文字進行比較:
select DRCR_CR_DT
from PS_DRCR
where
TRUNC(TO_DATE(DRCR_CR_DT, 'DD/MM/YYYY HH:MI:SS AM')) = DATE '2022-04-01';
db<>小提琴
你得到 ORA-00932 的原因是,在它查看所涉及的實際值之前,決議器會看到如下內容:
where TRUNC(<some string>) = TO_DATE(<some string>)
TRUNC 的數字形式“將任何數字資料型別或任何可以隱式轉換為數字資料型別的非數字資料型別作為引數”,而日期形式僅采用“日期時間資料型別”。這意味著TRUNC(<some string>)必須被解釋為一個數字。
因此,無需查看要轉換的任一字串,它就知道轉換為:
where <some number> = <some date>
它在進行任何實際轉換之前進行分析,因此它沒有嘗試轉換日期字串;當它確實到達那么遠時會拋出 ORA-01843。
uj5u.com熱心網友回復:
我期待一些不同的東西;如果您提供的日期是1/4/2022,則其中沒有mon格式模型:
SQL> select to_date('1/4/2022', 'dd/mon/yyyy') from dual;
select to_date('1/4/2022', 'dd/mon/yyyy') from dual
*
ERROR at line 1:
ORA-01843: not a valid month
固定時:
SQL> select to_date('1/4/2022', 'dd/mm/yyyy') from dual;
TO_DATE('1
----------
01/04/2022
SQL>
如果不是這樣,請提供示例資料(CREATE TABLE和INSERT INTO陳述句)。
[編輯]
這是你應該提供的;現在我必須這樣做,根據您的評論:
DRCR_CR_DT 是一個 varchar2 DRCR_CR_DT 的包含是 01/04/2022 00:00:00
所以:
SQL> create table ps_drcr (drcr_cr_dt varchar2(20));
Table created.
SQL> insert into ps_drcr values ('01/04/2022 00:00:00');
1 row created.
Query:TO_DATE的格式模型必須匹配資料格式。如果表包含 00:00:00,則格式模型是hh24:mi:ss,不是hh:mi:ss am您使用的。
在這種情況下,查詢適用于這個特定的值。
SQL> select *
2 from ps_drcr
3 where TRUNC(TO_DATE(DRCR_CR_DT, 'DD/MM/YYYY HH24:MI:SS')) =
4 TO_DATE('1/4/2022','dd/mm/yyyy');
DRCR_CR_DT
--------------------
01/04/2022 00:00:00
SQL>
請注意,將date資料型別值存盤為字串(到varchar2列中)總是一個非常糟糕的主意,因為沒有什么可以阻止您將例如存盤ab/&4/20xz 0a:f8:fi到varchar2列中,而且這肯定不是有效的日期值。如果表中至少有一行drcr_cr_dt不代表有效日期,則查詢將失敗。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/472550.html
