我有一个字典表'字典',其中列' word '包含所有英语单词的列表。
我想找到所有仅包含特定字母字符的单词,并排除其余字母。我可以这样做(请参阅下面的示例(,但是如您所见,这是彻头彻尾的丑陋。
示例
目前要查找所有包含字母'a','b','c','x','y','z'的单词,但是我要这样做:
SELECT word
FROM dictionary
WHERE (
word LIKE '%a%'
OR word LIKE '%b%'
OR word LIKE '%c%'
OR word LIKE '%x%'
OR word LIKE '%y%'
OR word LIKE '%z%'
) AND (
word NOT LIKE '%d%'
AND word NOT LIKE '%e%'
AND word NOT LIKE '%f%'
AND word NOT LIKE '%g%'
AND word NOT LIKE '%h%'
AND word NOT LIKE '%i%'
AND word NOT LIKE '%j%'
AND word NOT LIKE '%k%'
AND word NOT LIKE '%l%'
AND word NOT LIKE '%m%'
AND word NOT LIKE '%n%'
AND word NOT LIKE '%o%'
AND word NOT LIKE '%p%'
AND word NOT LIKE '%q%'
AND word NOT LIKE '%r%'
AND word NOT LIKE '%s%'
AND word NOT LIKE '%t%'
AND word NOT LIKE '%u%'
AND word NOT LIKE '%v%'
AND word NOT LIKE '%w%' )
使用某种形式的正则或其他优化来完成此任务的任何方法?任何技巧或提示都将不胜感激。
您可以使用REGEXP
SELECT `word `
FROM `dictionary`
WHERE `word` REGEXP '[abcxyzABCXYZ]'
AND `word` NOT REGEXP '[defghijklmnopqrstuvwDEFGHIJKLMNOPQRSTUVW]'
这是一种更好的方法。
SELECT word
FROM dictionary
WHERE word REGEXP '.*[abcxyzABCXYZ].*$'
AND word NOT REGEXP '.*[defghijklmnopqrstuvwDEFGHIJKLMNOPQRSTUVW].*$';
检查此。
set @1='a'\
set @2 ='b'\
set @3 ='c'\
set @4 ='x'\
set @5 ='y'\
set @6 ='z'\
set @find=CONCAT(@1,@2,@3,@4,@5,@6)\
set @ALl='abcxyzdefghijklmnopqrstuvw'\ all alphabets here
set @ALl=replace(@ALl,@1,'')\ replace alphabet that you want
set @ALl=replace(@ALl,@2,'')\
set @ALl=replace(@ALl,@3,'')\
set @ALl=replace(@ALl,@4,'')\
set @ALl=replace(@ALl,@5,'')\
set @ALl=replace(@ALl,@6,'')\
SELECT word
FROM dictionary
WHERE word RLIKE CONCAT('.*[',@find,'].*$')
AND word NOT RLIKE CONCAT('.*[',@ALl,'].*$');\
在此处检查演示
如果由于某种原因无法使用REGEXP
,那么这也应该有效:
SELECT word
FROM dictionary
WHERE Replace(Replace(Replace(Replace(Replace(Replace(
word, 'a', ''),
'b', ''),
'c', ''),
'x', ''),
'y', ''),
'z', '') = ''
我怀疑这会很快。再说一次,我不确定是否有任何事情对于此要求=(
测试简单:
word REGEXP '^[abcxyz]*$'
说,从开始(^
(到结束($
(的所有内容都必须是字符(*
(字符串([]
(abcxyz
。
我在使用不敏感的整理的推定中不包括下部和上案。
不需要AND .. NOT
。
可能存在一个问题:如果要允许notw
,您是否要匹配won't
?也就是说,标点符号应该怎么办?
(问题中可能没有充分指定的其他边缘案例。(
WHERE Field not LIKE '%[^a-z0-9 .]%'