2012-03-30 771 views
3

比方说,我有一个字符串,其中的单词由1或多个空格分隔,我想在SQL LIKE条件中使用该字符串。如何让我的SQL并告诉它匹配我的字符串中的一个或多个空格字符?有没有我可以用来做这件事的SQL通配符?SQL LIKE通配符空格字符

让我知道

+0

嗯,我不知道是否有一个解决方案,但无论如何,使用类似或通配符在SQL查询是一种不好的做法,因为它可以很慢。更喜欢使用像Lucene这样的索引引擎来执行这样的查询 – 2012-03-30 15:44:14

+0

请发布您的表格结构和迄今为止尝试过的查询。 – 2012-03-30 15:44:35

+0

使用正则表达式 – miki 2012-03-30 15:48:54

回答

4

如果你只是希望得到用于至少一个空白/空格什么,那么你可以这样做以下WHERE myField LIKE '% %'

2

此使用等,但是你可以做什么,如果你知道这情况,你不能做存在于您的数据中,就像您将数据插入表格一样,使用正则表达式匹配来预先检测它并在为此创建的不同列中设置一个标志。

2

另一种匹配一个或多个空间的方法是使用[]。 就这样做了。

LIKE '%[ ]%' 

这将匹配一个或多个空格。

+1

据我所知,只有'%%''的方法只能匹配1个空格。即“Hello [] World''将不匹配Hello和World之间有两个空格的地方。 – Adamantish 2014-11-21 13:09:50

2

我只是用'%'替换空白字符。可以说,我想做一个LIKE查询在这样一个字符串“我想查询此字符串与LIKE”

@search_string = 'I want to query this string with a LIKE' 
@search_string = ("%"[email protected]_string+"%").tr(" ", "%") 
@my_query = MyTable.find(:all, :conditions => ['my_column LIKE ?', @search_string]) 

首先我添加“%”开始和结束字符串

( “%” + @ search_string的+ “%”)

再更换其他剩余的空白字符'%'像这样

.tr(””, “%”)

3

如果你的方言允许,使用SIMILAR TO,其允许更灵活的匹配,包括正常的正则表达式的量词“?”,“*”和“+”,与由分组指示“()”

where entry SIMILAR TO 'hello +there' 

将匹配'hello there'与这两个单词之间的任意数量的空格。

我想在MySQL这是

where entry RLIKE 'hello +there' 
1

我知道这是晚了,但我从来没有发现关于解决这一个问题LIKE

SQL LIKE内没有办法做你想做的事。你需要做的是在表达式中使用REGEXP[[:space:]]

因此,要找到一个或多个空格两个词之间..

WHERE col REGEXP 'firstword[[:space:]]+secondword'