SQL LIKE子句中的%是否和正则.*一样具有贪婪匹配特性?
SQL中LIKE的%是否和正则.*一样是贪婪匹配并回溯?
你的SQL语句:
SELECT * FROM mytable where username like '%ash%';
答案是:不一样,SQL里LIKE的%完全没有正则中.*那种贪婪匹配+回溯的机制。
具体说明:
- 正则的
.*是贪婪匹配逻辑,会先尽可能吞入所有字符,当后续匹配条件不满足时,再逐步回溯调整匹配的长度。 - 但SQL的
%逻辑要简单直接得多:它的作用就是匹配任意数量(包括0个)的任意字符,匹配过程是线性扫描的——比如%ash%会从字符串开头开始扫描,找到ash子串后,前面的所有字符直接被前一个%匹配,后面的所有字符直接被后一个%匹配,全程不需要回溯,因为它只需要完成“字符串包含指定子串”的匹配目标,没有“先全吞再调整”的复杂逻辑。
举个实际例子:如果用户名是tomashjerry,%ash%会直接匹配tom(前%)、ash、jerry(后%),整个过程一步到位,不会像正则那样先把整个字符串全吞,再回头找ash的位置。
内容的提问来源于stack exchange,提问作者Sachin
相关产品推荐
相关产品推荐

