使用[charlist]通配符的mysql语句

时间:2012-01-20 05:17:34

标签: mysql

尝试使用此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”

2 个答案:

答案 0 :(得分:0)

使用REGEXP(或其同义词RLIKE)运算符。

SELECT *
FROM table
WHERE word RLIKE '^a[^tesp]{2}c[^tesp]{4} *$'
GROUP BY word;

[^tesp]{2}表示“匹配不是t,e,s或p的2个字符。”

请注意,正则表达式强制执行8个字母。此外,它在正则表达式末尾处RTRIM处理*$(在结尾处允许任意数量的空格)。

这样,您只需对每个单词进行一次传递,而不是三次(一次用于LENGTH,一次用于LIKE 'a__c____',一次用于“t”,“e”,“s”,“p “)。

答案 1 :(得分:0)

这应该足以让where子句回答所述的问题:

word rlike '^a[a-z]{2}c[a-z]{4}$' and work not rlike '[tesp]'

虽然它可以折叠成一个正则表达式:

word rlike '^a[a-df-oqru-z]{2}c[a-df-oqru-z]{4}$'

如果我是你的话,我会选择两种形式的表格,因为我可以保持一定的可靠性,而且最有可能也是表现。