摘要:
MySQL数据库在索引条件相同的情况下,正则和LIKE模糊匹配,谁的效率,更好?一般用哪个?在索引相同情况下,效率差不多。不过还要经过严格测试才能知道答案。说实话,这两个方法效率都...
MySQL数据库在索引条件相同的情况下,正则和LIKE模糊匹配,谁的效率,更好?一般用哪个?
在索引相同情况下,效率差不多。不过还要经过严格测试才能知道答案。说实话,这两个方法效率都不高,原因是使用正则或者like时,一般情况下,索引会失效。建议使用全文索引。
mysql如何截取正则表达式的内容?
mysql中的正则表达式是一种匹配,用于筛选出满足条件的记录。我们需要利用其它的函数或者手段才能截取出正则表达式中的内容。
mysql中的正则表达式
mysql中用regexp这个关键字表示正则表达式的匹配,常用的正则表达式模式,mysql都支持,和PhP或者 PERL中脚本语言比较相似。
^表示匹配字符串的起始位置;
$表示匹配字符串的结束位置;
*表示匹配前面字符的零次或者多次;
?表示0或者1个匹配;
+表示1或者多个匹配
{n}表示匹配n个;
[0-9]表示数字的0-9匹配。
select name from person where name regexp '^王' 表示匹配姓名中王姓开头的记录
截取正则表达式中的内容
截取内容一般会用到字符串截取的相差函数,mid或者substr,即截取某一部分字符串的内容做为我们想要的结果。当然对于一些简单的内容截取,left\right函数都是可以直接使用的。
比如,我们希望获取访问了某个子目录的浏览量及用户数,就可以通过regexp进行匹配,然后再进行截取。
select create_date,local_url from page_view regexp '^https://' limit 0,100
我们希望统计出子目录形如member,articl下的页面访问情况,这个时候我们就可以结合字符串截取函数就可以截取出想要的结果,
select create_date,local_url,instr(local_url,'/member/') url_index, (case when (local_url regexp '^http(s)?://([\w-]+\.).*/member/.*') then mid(local_url,1,instr(local_url,'/member/')+length('/member/')-1) else null end) cat_url from page_view limit 0,100;
执行该SQL语句,我们就可以截取出子目录的数据,根据截取出来的数据,进一步就可以进行统计得到我们期望的结果。