Объедините два столбца в SQL для предложения WHERE

В моем SQL я использую предложения WHERE и LIKE для выполнения поиска. Однако мне нужно выполнить поиск по объединенному значению двух столбцов - first_name и last_name:

WHERE customers.first_name + customers.last_name LIKE '%John Smith%'

Это не работает, но я подумал, как я могу что-то сделать в этом направлении?

Я попытался сделать отдельный поиск двумя столбцами, например:

WHERE customers.first_name LIKE '%John Smith%' OR customers.last_name LIKE '%John Smith%'

Но, очевидно, это не сработает, потому что поисковый запрос представляет собой комбинированное значение этих двух столбцов.

Ответы

Ответ 1

Используйте следующее:

WHERE CONCAT(customers.first_name, ' ', customers.last_name) LIKE '%John Smith%'

Обратите внимание, что для того, чтобы это работало по назначению, имя и фамилия должны быть обрезаны, т.е. они не должны содержать ведущие или завершающие пробелы. Лучше обрезать строки в PHP, прежде чем вставлять в базу данных. Но вы также можете включить обрезку в свой запрос следующим образом:

WHERE CONCAT(TRIM(customers.first_name), ' ', TRIM(customers.last_name)) LIKE '%John Smith%'

Ответ 2

Я бы начал с чего-то вроде этого:

WHERE customers.first_name LIKE 'John%' AND customers.last_name LIKE 'Smith%'

Это приведет к возврату таких результатов, как: John Smith, Johnny Smithy, Johnson Smithison, потому что знак процента находится только в конце предложения LIKE. В отличие от '%John%', который может возвращать результаты, такие как: aaaaJohnaaaa, aaaSmithaaa.