假设我有一个名为" 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" ="的记录。
我的查询有什么问题?
答案 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