我有一個表,其中date_one欄位型別為VARCHAR2 (20 BYTE),date_two欄位型別為DATE。
輸出為date_one29-01-2019 20:22:08,輸出為date_two25-JAN-19。
我需要根據這兩個欄位之間的天數間隔來計算記錄,但我很難解決這個錯誤:
select field1,field2,field3
from mytable
where
trunc(to_date(DATE_ONE, 'DD-MM-YYYY HH24:MI:SS')) - trunc(to_date(DATE_TWO 'DD-MM-YYYY')) > interval '15' day;
ORA-00932: 不一致的資料型別: 預期的 NUMBER, 得到 INTERVAL DAY TO SECOND 00932. 00000 - “不一致的資料型別: 預期的 %s 得到 %s”
我該如何解決這個錯誤?
uj5u.com熱心網友回復:
兩個日期相減的結果是天數,與兩個時間戳相減的結果不同,時間戳是一個間隔。您目前正在嘗試將您從減法中獲得的數字與固定間隔進行比較——這就是錯誤的意思。資料型別不匹配且無法隱式轉換以進行比較。
您可以將該數字轉換為間隔:
select field1,field2,field3
from mytable
where (trunc(to_date(DATE_ONE, 'DD-MM-YYYY HH24:MI:SS')) - trunc(DATE_TWO)) * interval '1' day > interval '15' day;
或者更簡單地與數字 15 進行比較:
select field1,field2,field3
from mytable
where trunc(to_date(DATE_ONE, 'DD-MM-YYYY HH24:MI:SS')) - trunc(DATE_TWO) > 15;
db<>小提琴
我已經改成trunc(to_date(DATE_TWO, 'DD-MM-YYYY'))簡單了trunc(DATE_TWO)。因為DATE_TWO已經是日期,所以當您這樣做時,to_date(DATE_TWO, 'DD-MM-YYYY')您正在使用會話的 NLS_DATE_FORMAT 設定(似乎是 DD-MON-RR)將日期隱式轉換為字串,然后將該字串轉換回日期。除了浪費精力之外,如果在具有不同設定的會話中運行,這可能會中斷。您只需要截斷已有的日期。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/426873.html
