Sql 忽略空格的查询
运行查询以便字段中的空格可用的最佳方法是什么 忽略?例如,以下查询:Sql 忽略空格的查询,sql,mysql,database,postgresql,Sql,Mysql,Database,Postgresql,运行查询以便字段中的空格可用的最佳方法是什么 忽略?例如,以下查询: SELECT * FROM mytable WHERE username = "JohnBobJones" SELECT * FROM mytable WHERE username = "John Bob Jones" 将找到以下条目: John Bob Jones JohnBob Jones JohnBobJones 我正在使用php或python,但我认为这并不重要。一种方法是使用LIKE和通配符来构建查询ci
SELECT * FROM mytable WHERE username = "JohnBobJones"
SELECT * FROM mytable WHERE username = "John Bob Jones"
将找到以下条目:
John Bob Jones
JohnBob Jones
JohnBobJones
我正在使用php或python,但我认为这并不重要。一种方法是使用LIKE和通配符来构建查询citeria。比如:
SELECT * FROM mytable
WHERE REPLACE(username, ' ', '') = REPLACE("John Bob Jones", ' ', '')
SELECT * FROM mytable
WHERE username like 'John%' and REPLACE(username, ' ', '') = REPLACE("John Bob Jones", ' ', '')
从mytable中选择*用户名,如“JohnBobJones” 视情况而定。如果你不在乎好的表现,那么你可以做很多事情,但大多数都会很慢。也许这对你来说没关系,但我会把这个答案留在这里,以防其他读者想要一个快速的解决方案 如果您想要非常快的性能,您应该在数据库中索引不带空格的字符串。在PostgreSQL中,您可以。可以使用此选项在列上创建索引,并将空格替换为空字符串。这种方法的优点是,除了创建索引外,不需要维护 在MySQL中,您不能这样做,因此最简单的方法是复制数据库中的数据——一次使用空格,一次不使用空格。在WHERE子句中使用不带空格的列,但在SELECT列列表中使用原始列。这需要更多的维护,因为列必须保持同步。您可以使用应用程序逻辑或数据库触发器执行此操作。尝试以下操作:
SELECT * FROM mytable WHERE username =REPLACE("John Bob Jones", ' ', '')
建议的解决方案看起来很好,但性能很差,如果可能的话,可以使用以下方式限制查询:
SELECT * FROM mytable
WHERE username like 'John%' and REPLACE(username, ' ', '') = REPLACE("John Bob Jones", ' ', '')
您还可以使用REGEXP:
SELECT * FROM mytable
WHERE username REGEXP '^John *Bob *Jones'
并记住性能,在哪里操作一般都是坏主意
看看我们通常希望搜索文本,而不考虑空格、空格和字母的数量 只需修剪、小写并替换一个空格中的所有多个非单词字符
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:这是一个包含许多空格和不同字符的长文本
数据中的垃圾和查询中的垃圾,但它仍然发现它是正确的。PostgreSQL还是MySQL?在每种情况下,最佳解决方案可能不同。尝试编写在这两种情况下都有效的东西通常会导致查询速度变慢。很好,我刚刚在邮政编码搜索中尝试了mySQL替换,哇。。。它很慢。。。谢谢你的提示!还可以将REPLACE()函数与LIKE运算符和通配符一起使用。例如:从mytable REPLACE(用户名,,'')中选择*如REPLACE(“John B%”,'');找不到JohnBob Jones