如何写一个能匹配字符串的mysql语句
mysql的字符串匹配
需求表数据如下:
Java代码
mysql> select * from test;
+----+-------+
| id | name |
+----+-------+
| 1 | abc** |
+----+-------+
1 row in set (0.00 sec)
我想匹配 abcde,也就是一个*代表一个字符
分析:
在正则中*代表0个或者多个,因此此处的存储有问题,应该存储.或者_那么查询sql可以通过like和REGEXP 来实现
结论:
1.采用like
Java代码
mysql> select * from test where 'abcde' like replace(name,'*','_');
+----+-------+
| id | name |
+----+-------+
| 1 | abc** |
+----+-------+
1 row in set (0.01 sec)
先替换成_然后在like 匹配
2.采用REGEXP
Java代码
mysql> select * from test where 'abcde' regexp replace(name,'*','.');
+----+-------+
| id | name |
+----+-------+
| 1 | abc** |
+----+-------+
1 row in set (0.02 sec)
替换成.然后在匹配
MySQL模糊查询like和ilike的区别
LIKE 和 ILIKE 操作符可以模糊匹配字符串,LIKE是一般用法,ILIKE匹配时则不区分字符串的大小写,~ 波浪号则可以使用正则匹配。
LIKE和 ILIKE
它们需要结合通配符使用,下面介绍两种常用的通配符。
%:百分号用于匹配字符串序列,可匹配任意组合;
_:下划线用于匹配任何单一字符。
则可以使用正则模式来匹配字符串,除此之外它匹配模式还有一个特殊的地方
select * from table where ~ 'ab'; --> 如果是这样的形式就代表着他可以匹配任何包含ab的字符串其实就相当于省略的两边的 .*
如果想要做前缀匹配或后缀匹配,可以用下面的方法
1、前缀+模糊查询。
select * from table where ~ '^ab';
2、后缀+模糊查询。
select * from table where ~ 'ab$';