运行查询的最佳方法是什么,以便字段中的空格 忽略?例如,以下查询:
SELECT * FROM mytable WHERE username = "JohnBobJones"
SELECT * FROM mytable WHERE username = "John Bob Jones"
会找到以下条目:
John Bob Jones
JohnBob Jones
JohnBobJones
我使用的是php或python,但我认为这无关紧要。
答案 0 :(得分:59)
SELECT * FROM mytable
WHERE REPLACE(username, ' ', '') = REPLACE("John Bob Jones", ' ', '')
答案 1 :(得分:11)
这取决于。如果你不关心良好的表现,那么你可以做很多事情,但大多数都会很慢。也许这对你没关系,但我会在这里留下这个答案,以防其他人阅读时想要快速解决方案。
如果您想要非常快的性能,则应该在数据库中索引字符串而不留空格。在PostgreSQL中,你可以create an index on a function。您可以使用它在列上创建索引,并用空字符串替换空格。这种方法的优点是除了创建索引之外不需要维护。
在MySQL中你不能这样做,所以最简单的方法是复制数据库中的数据 - 一次是空格而一次是没有。在WHERE子句中使用不带空格的列,但在SELECT列列表中使用原始列。这需要更多维护,因为列必须保持同步。您可以使用应用程序逻辑或数据库触发器执行此操作。
答案 2 :(得分:2)
建议的解决方案看起来非常好但是对于性能来说很糟糕,如果有可能使用类似
之类的限制查询SELECT * FROM mytable 用户名如'John%'和REPLACE(用户名,'','')= REPLACE(“John Bob Jones”,'','')
您也可以使用REGEXP。
SELECT * FROM mytable 用户名REGEXP'^ John * Bob * Jones'
并且记住表现,操作在哪里一般都是坏主意。
看看http://dev.mysql.com/doc/refman/5.7/en/pattern-matching.html
答案 3 :(得分:1)
尝试这个:
SELECT * FROM mytable WHERE username =REPLACE("John Bob Jones", ' ', '')
答案 4 :(得分:0)
我们经常想要搜索文本,无论空格数,空格和字母数。
修剪,小写,并替换一个空格的所有多字非字字符。
SELECT regexp_replace(trim(lower('Here is a long text , with many white spaces AND different character sensitive')),'\W+',' ','g') t
return:这是一个包含许多空格和不同字符敏感的长文本
以下是搜索的用途。只有单词的顺序很重要,仅此而已。这很美。
select * from (
SELECT regexp_replace(trim(lower('Here is a long text , with many white spaces AND different character sensitive')),'\W+',' ','g') t
) as o
where t= regexp_replace(trim(lower('Here is a LonG TEXT , with mANY white ^ spaces AND different character sensiTive')),'\W+',' ','g')
return:这是一个包含许多空格和不同字符敏感的长文本
查询中的数据和垃圾中的垃圾,但仍然可以找到它。
答案 5 :(得分:-3)
一种方法是使用LIKE和WildCards来构建查询条件。类似的东西:
SELECT * FROM table WHERE username LIKE'John Bob Jones';