Postgresql
運算符不存在:間隔 < 日期
我想做以下比較:
IF ( V_C_CRITERE2.DATE_FIN_SOUHAITEE - TO_DATE(V_SEUIL_ALERT) < CURRENT_DATE) THEN
DESIRED_END_DATE是一個日期。
但是得到這個錯誤:
operator does not exist: interval < date
我該如何進行比較?
儘管問題指出這
DATE_FIN_SOUHAITEE
是一個 DATE,但錯誤消息“運算符不存在:沒有時區的時間戳 - 數字”清楚地表明它確實是一個timestamp
. 在 Postgres 中 - 與 Oracle 不同 - a 與 atimestamp
有很大不同date
(在 Oracle 中,它們或多或少是相同的東西 - 它們只是精度不同)。在 Postgres 中,您只能
interval
從 a 中減去 atimestamp
,並且可以從 a 中減去整數值date
如果 V_SEUIL_ALERT 確實是一個儲存代表年份的數字的 varchar,則需要將該字元串值轉換為適當的間隔,以便能夠從 a 中減去它
timestamp
:V_C_CRITERE2.DATE_FIN_SOUHAITEE - make_interval(years => V_SEUIL_ALERT::integer)
然後可以使用
<
with比較上述內容current_date
。我不知道 Oracle 中的原始程式碼做了什麼,因為
DATE_FIN_SOUHAITEE - V_SEUIL_ALERT
會將 V_SEUIL_ALERT 隱式轉換為 anumber
,然後將其視為從 DATE_FIN_SOUHAITEE 中減去的**天數,**而不是數年。如果該列確實儲存天而不是年(如評論中所述),您需要使用:
make_interval(days => V_SEUIL_ALERT::integer)
您真的應該利用該遷移的機會並將列的錯誤數據類型修復為
V_SEUIL_ALERT
整數、數字,或者即使interval
那是您使用它的目的。切勿將數字儲存在 VARCHAR 列中。這在甲骨文中已經是一個非常非常糟糕的主意。