Запрос, которые игнорируют пробелы

Что лучший способ состоит в том, чтобы выполнить запрос так, чтобы пробелы в полях были проигнорированы? Например, следующие запросы:

SELECT * FROM mytable WHERE username = "JohnBobJones"    
SELECT * FROM mytable WHERE username = "John Bob Jones"

нашел бы следующие записи:

John Bob Jones
JohnBob Jones
JohnBobJones

Я использую php или Python, но я думаю, что это не имеет значения.

31
задан JSuar 7 May 2013 в 20:20
поделиться

3 ответа

SELECT * FROM mytable 
    WHERE REPLACE(username, ' ', '') = REPLACE("John Bob Jones", ' ', '')
61
ответ дан 27 November 2019 в 21:54
поделиться

Один из способов - использовать LIKE и Подстановочные знаки для построения вашего запроса. Примерно так:

SELECT * FROM mytable WHERE username LIKE 'John Bob Jones';

-3
ответ дан 27 November 2019 в 21:54
поделиться

Это зависит от ситуации. Если вас не волнует хорошая производительность, вы можете сделать много вещей, но большинство из них будет медленным. Возможно, для вас это нормально, но я оставлю этот ответ здесь на случай, если другие читатели захотят найти быстрое решение.

Если вам нужна очень высокая производительность, вы должны индексировать строку без пробелов в базе данных. В PostgreSQL вы можете создать индекс для функции . Вы можете использовать это для создания индекса столбца, в котором пробелы заменены пустой строкой. Преимущество этого метода в том, что он не требует обслуживания, кроме создания индекса.

В MySQL вы не можете этого сделать, поэтому самым простым способом было бы продублировать данные в базе данных - один раз с пробелами и один раз без них. Используйте столбец без пробелов в предложении WHERE, но исходный столбец в списке столбцов SELECT. Это требует большего обслуживания, поскольку столбцы должны быть синхронизированы. Вы можете сделать это с помощью логики приложения или триггеров базы данных.

11
ответ дан 27 November 2019 в 21:54
поделиться
Другие вопросы по тегам:

Похожие вопросы: