如何提取仅包含1" ="的行在MySQL中使用REGEXP?

时间:2015-03-19 07:25:02

标签: mysql regex

假设我有一个名为" t1"的表。其中包含一个名为" ID"它有以下记录

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

如何提取仅包含1" ="的记录?在MySQL中使用REGEXP进行签名?

我已经尝试了

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 个答案:

答案 0 :(得分:2)

没有REGEXP的非常简单的解决方案是

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 :(得分:1)

SELECT * FROM t1 WHERE ID REGEXP '^[^=]*=[^=]*$';

猜猜应该这样做。请看小提琴http://www.sqlfiddle.com/#!9/b2ead/2/0