我正在嘗試通過應用篩選條件來標識僅列的數字,從而在表格中排列SELECT
。這是一個僅用於報告的查詢,所以我們最不打擾的是性能,因爲我們沒有編譯PL/SQL的特權,無法通過TO_NUMBER()
進行檢查,如果它是數字或不是數字,則返回。使用列中的數字只對數據進行篩選SQL
我必須在SQL中實現它。此外,該列具有這樣的值,必須將其視爲數字。
-1.0
-0.1
-.1
+1,2034.89
+00000
1023
突破性的研究之後,我寫了這一點。(硬時間)
WITH dummy_data AS
(SELECT '-1.0' AS txt FROM dual
UNION ALL
SELECT '+0.1' FROM dual
UNION ALL
SELECT '-.1' FROM dual
UNION ALL
SELECT '+1,2034.89.00' FROM dual
UNION ALL
SELECT '+1,2034.89' FROM dual
UNION ALL
SELECT 'Deva +21' FROM dual
UNION ALL
SELECT '1+1' FROM dual
UNION ALL
SELECT '1023' FROM dual
)
SELECT dummy_data.*,
REGEXP_COUNT(txt,'.')
FROM dummy_data
WHERE REGEXP_LIKE (TRANSLATE(TRIM(txt),'+,-.','0000'),'^[-+]*[[:digit:]]');
我得到了這一點。
TXT REGEXP_COUNT(TXT,'.')
------------- ---------------------
-1.0 4
+0.1 4
-.1 3
+1,2034.89.00 13 /* Should not be returned */
+1,2034.89 10
1+1 3 /* Should not be returned */
1023 4
7 rows selected.
現在非常困惑與2個問題。
1)我得到+1,2034.89.00
結果,我應該消除它。 (意思是小數點後兩位)不是小數點,所有其他特殊字符( - +,)的兩倍都應該被消除)
2)爲了使它更醜,計劃做一個REGEXP_COUNT('.') <= 1
。但它沒有返回我的期望,而選擇它,我看到奇怪的價值觀返回。
有人可以幫我去框定爲REGEXP
的('.','+','-')
http://stackoverflow.com/questions/5666986/how-can-i-determine-if-a-string-is-numeric-in-sql – OraNob
'REGEXP_COUNT(」。')'統計字符串中的所有字符。所以它應該是'REGEXP_COUNT('\。')' –