2013-04-11 90 views
3

中的文字:获取精确匹配与LIKE - SQL/PHP

"Hello, I'm from Hell", 
"Hello, I'm from Ell" 

及以下SQL子句:

SELECT * FROM table WHERE text LIKE '%ell%' 

我得到上述两种文本,但我不希望得到两个文本,因为我正在寻找文字 “埃尔”而不是“地狱”

如果有人知道我的意思,你能帮我吗?

在此先感谢!

编辑:

更好的例子

就像当你想查找单词“大”,但它不能是任何其他的字像“大”或“最大”

的一部分
+0

你可能不得不使用正则表达式 – Oussama 2013-04-11 16:46:04

+0

你的意思是你想执行你的类似语句的区分大小写? – 2013-04-11 16:49:33

+0

不区分大小写。我想搜索单独的单词“ell”。我不想得到回报,因为埃尔是地狱的一部分,如果你知道我的意思。 – Mossawi 2013-04-11 16:51:18

回答

9

你可以使用MySQL的正则表达式字边界匹配:

SELECT * FROM table WHERE text REGEXP '[[:<:]]ell[[:>:]]' 

这其中cosntains字ell用一个单词边界的字符串相匹配任何一边。

+0

谢谢!这是我需要的! – Mossawi 2013-04-11 17:01:11

+0

@Mossawi不客气:) – Paulpro 2013-04-11 17:05:53

+0

你是否用多行文字测试正则表达式,如 '123 地狱 hellhell'? 如果在多行文本中使用“text”字段格式,并使用上述语句,它仍然会显示结果,但它不应该是 – 2013-04-11 17:21:25

1

你能搜索一个空间吗?

SELECT * 
FROM table 
WHERE text LIKE '% ell%' 
OR text LIKE 'ell%' // needed if string starts with ell 
1

你可以试试这个:

SELECT * FROM table WHERE text LIKE BINARY '%ell%' 
0

选择不区分大小写

SELECT * FROM表 其中LOWER(列)像BINARY LOWER( 'ELL')

它的工作原理,如果文本具有多行的完全匹配。