當我在 postgres 資料庫上運行以下查詢時,它運行良好。但是在 oracle 資料庫上它會發送錯誤
ORA-01722: 無效號碼
oracle上的這個查詢一直作業到一周前,在這周它產生了一個錯誤。
一般語法如下:
SELECT MIN(idd) FROM
(SELECT CAST(id AS INTEGER) idd
FROM prev_table) new_table
沒有該MIN
功能,它可以作業。
當我使用MIN()
獲取最小 id 時會出現問題。
在這個 prev_table 中,id 列被定義為 varchar,我想將它們轉換為整數,然后得到最小值。
uj5u.com熱心網友回復:
您不應該將數字存盤為文本。
從 Oracle 12.2 開始,您可以使用TO_NUMBER(... DEFAULT ... ON CONVERSION ERROR)
:
SELECT MIN(TO_NUMBER(id DEFAULT NULL ON CONVERSION ERROR)) AS min_id
FROM prev_table
WHERE TO_NUMBER(id DEFAULT NULL ON CONVERSION ERROR) IS NOT NULL;
或VALIDATE_CONVERSION
:
SELECT MIN(TO_NUMBER(id)) AS min_id
FROM prev_table
WHERE VALIDATE_CONVERSION(id AS INTEGER) = 1;
其中,對于樣本資料:
CREATE TABLE prev_table (id) AS
SELECT 'ABC' FROM DUAL UNION ALL
SELECT '3e2' FROM DUAL UNION ALL
SELECT '1000' FROM DUAL UNION ALL
SELECT '999.9' FROM DUAL UNION ALL
SELECT ' 420' FROM DUAL UNION ALL
SELECT '3e4e' FROM DUAL;
兩個輸出:
MIN_ID |
---|
300 |
小提琴
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/506863.html
上一篇:無法從包內創建表