尝试使用此sql语句。前两个部分工作正常,我正在尝试在公司字符列表中,以便其拉动的字符串不能包含其中的任何字母
SELECT * FROM table WHERE LENGTH(RTRIM(word)) = 8 AND word LIKE 'a__c____' AND word LIKE '%[!tesp]%' GROUP BY word
基本上,我希望这个语句能够提取出一个词:
- 长度为 8 个字母
- 以“a”开头,第四个字母是“c”
- 其中不包含“t”“e”“s”“p”
最佳答案
使用REGEXP
(或其同义词RLIKE
)运算符。
SELECT *
FROM table
WHERE word RLIKE '^a[^tesp]{2}c[^tesp]{4} *$'
GROUP BY word;
[^tesp]{2}
表示“匹配 2 个非 t、e、s 或 p 的字符”。
请注意,8 个字母是由正则表达式强制执行的。此外,它还通过正则表达式末尾的 *$
处理 RTRIM
(允许末尾有任意数量的空格)。
这样您只需对每个单词执行一次而不是三次(一次针对 LENGTH
,一次针对 LIKE 'a__c____'
,一次针对“t”,” e","s","p")。
关于使用 [charlist] 通配符的 mysql 语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8937050/