2015-03-19 60 views
1

假設我有一個名爲「T1」表中包含了一個名爲「ID」列具有以下記錄如何通過在MySQL中使用REGEXP來提取僅包含1「=」的行?

abcde=1=2 
qwert=3 
hhhhj=9 
zxcv=5=8 

我如何可以提取,通過在MySQL中使用REGEXP只包含1「=」號記錄?

我已經試過

SELECT * FROM t1 WHERE ID REGEXP '\\w*=\\w*=\\w*'; -- returns no records 
SELECT * FROM t1 WHERE ID REGEXP '\\w*=\\w*';  -- returns all 4 records 

我預計第一查詢返回包含2「=」,第二個查詢返回只包含記錄1「=」的記載。

我的查詢出了什麼問題?

回答

2

一個非常簡單的解決辦法是

select * from table 
where 
length(ID) - length(replace(ID,'=','')) = 1 ; 

一些測試用例

mysql> select length('qwert=3') - length(replace('qwert=3','=','')) as diff; 
+------+ 
| diff | 
+------+ 
| 1 | 
+------+ 
1 row in set (0.00 sec) 

mysql> select length('zxcv=5=8') - length(replace('zxcv=5=8','=','')) as diff; 
+------+ 
| diff | 
+------+ 
| 2 | 
+------+ 
1 row in set (0.00 sec) 
1
SELECT * FROM t1 WHERE ID REGEXP '^[^=]*=[^=]*$'; 

想這應該做it.See撥弄http://www.sqlfiddle.com/#!9/b2ead/2/0沒有REGEXP

+0

我嘗試「[^ = ] * = [^ =] * $',但它不起作用:-( – Brian 2015-03-19 07:32:09

+0

@lyen它正在工作。參見演示。 – vks 2015-03-19 07:40:38

+0

也許它在我的機器上不起作用的原因是因爲我的MySQL版本是5.5.29,它低於5.26。 – Brian 2015-03-19 07:55:14

相關問題