忽略空格的查询

xRo*_*bot 31 mysql sql database postgresql

运行查询的最佳方法是什么,以便忽略字段中的空格?例如,以下查询:

SELECT * FROM mytable WHERE username = "JohnBobJones"    
SELECT * FROM mytable WHERE username = "John Bob Jones"
Run Code Online (Sandbox Code Playgroud)

会找到以下条目:

John Bob Jones
JohnBob Jones
JohnBobJones
Run Code Online (Sandbox Code Playgroud)

我使用的是php或python,但我觉得这没关系.

SLa*_*aks 61

SELECT * FROM mytable 
    WHERE REPLACE(username, ' ', '') = REPLACE("John Bob Jones", ' ', '')
Run Code Online (Sandbox Code Playgroud)

  • 您还可以将 REPLACE() 函数与 LIKE 运算符和通配符一起使用。例如: SELECT * FROM mytable REPLACE(username, ' ', '') LIKE REPLACE("John B%", ' ', ''); (2认同)

Mar*_*ers 11

这取决于.如果你不关心良好的表现,那么你可以做很多事情,但大多数都会很慢.也许这对你没问题,但我会在这里留下这个答案,以防其他人阅读时想要快速解决方案.

如果您想要非常快的性能,则应该在数据库中索引不带空格的字符串.在PostgreSQL中,您可以在函数上创建索引.您可以使用它在列上创建索引,并用空字符串替换空格.这种方法的优点是除了创建索引之外不需要维护.

在MySQL中你不能这样做,所以最简单的方法是复制数据库中的数据 - 一次是空格而一次是没有.在WHERE子句中使用不带空格的列,但在SELECT列列表中使用原始列.这需要更多维护,因为列必须保持同步.您可以使用应用程序逻辑或数据库触发器执