2015-11-26 40 views
0

我有Oracle DB中的表。例如tbl1。和1列。例如col1。我的col1 - 列文本類型。我需要選擇文本爲0的所有行,並在文本中出現一次。如果文本包含> 1位數字,我不需要它。例如我需要這行:如何創建正則表達式來查詢Oracle?

0 
text0 
0text 
text 0 text 
text0 text 

,我不需要這個行

only text 
0 0 
00 
10 
3243455 
0text 1 

我想我需要正則表達式,但我不知道如何使用它們。

我寫

select * from tbl1 t where regexp_like(t.col1,'[0]{1}') 

,但我得到的只是行,其中包含0

回答

2
[^0-9]*[0-9][^0-9]* 

這意味着:任何非數字的任意次數,然後一個數字恰好一次,然後任何非數字任意次數。

您可能需要添加^$迫使它匹配整個字符串:

^[^0-9]*[0-9][^0-9]*$ 
1

基於伊利亞高根答案,你可以得到你想要用下面的正則表達式的行:

WITH tbl1 AS (SELECT '0' col1 FROM dual 
       UNION 
       SELECT 'text0' col1 FROM dual 
       UNION 
       SELECT '0text' col1 FROM dual 
       UNION 
       SELECT 'text 0 text' col1 FROM dual 
       UNION 
       SELECT 'text0 text ' col1 FROM dual 
       UNION 
       SELECT 'only text' col1 FROM dual 
       UNION 
       SELECT '0 0' col1 FROM dual 
       UNION 
       SELECT '00' col1 FROM dual 
       UNION 
       SELECT '10' col1 FROM dual 
       UNION 
       SELECT '3243455' col1 FROM dual 
       UNION 
       SELECT '0text 1' col1 FROM dual) 
SELECT COL1, REGEXP_SUBSTR(col1,'\A\D*0\D*\Z') 
FROM tbl1 
WHERE REGEXP_LIKE(col1,'\A\D*0\D*\Z') 

其中:

  • \A是該行的開始。
  • \D是非數字字符。
  • 0是數字0的字符。
  • \Z是該行的結尾。