Выполнение LIKE сравнения в поле INT - PullRequest
23 голосов
/ 08 декабря 2011

Я довольно новичок в SQL, и я пытался получить полный список продуктов, которые совпадают с пользовательским вводом productID. Что-то вроде:

SELECT ProductID, ProductName FROM Products WHERE ProductID LIKE '%15%'

Я бы хотел перечислить все подходящие продукты, такие как: 15, 150, 2154 и т. Д.

К сожалению, у меня возникают проблемы, потому что поле productID представляет собой INT, а не строку. Есть ли относительно простой способ обойти это?

Ответы [ 2 ]

32 голосов
/ 08 декабря 2011

Вы можете CAST поле в строку:

 ... WHERE CAST(ProductID as CHAR) LIKE '%15%'

это очень плохо сказывается на производительности, поскольку mySQL не может использовать индексы, созданные для столбца INT. Но тогда, LIKE всегда медленный, даже если это делается в поле varchar: нет способа получить индекс, который ускоряет LIKE-запрос.

Может быть, стоит иметь второй столбец varchar, который отражает значения столбца int, и делать LIKE для этого - вам нужно будет сравнить его, чтобы выяснить, принесет ли он пользу.

5 голосов
/ 08 декабря 2011

Вы можете преобразовать int в строку, используя CONVERT(ProductID, CHAR(16)) AS ProductID, а затем использовать LIKE. Так что в вашем случае это будет

SELECT ProductID, ProductName FROM Products
WHERE CONVERT(ProductID, CHAR(16)) LIKE '%15%'

Вы должны помнить, что запрос выполнит полное сканирование таблицы без какой-либо поддержки индексов. В результате это будет действительно дорого и отнимает много времени.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...