Выполнение сравнения LIKE в поле INT
Я новичок в SQL, и я пытался получить полный список продуктов, которые соответствуют пользовательскому вводу идентификатора productID. Что-то вроде:
SELECT ProductID, ProductName FROM Products WHERE ProductID LIKE '%15%'
Я бы хотел, чтобы он перечислял все подходящие продукты, такие как:
15, 150, 2154 и т.д.
К сожалению, я сталкиваюсь с проблемами, потому что поле productID является INT, а не строкой. Есть ли относительно простой способ?
Ответы
Ответ 1
Вы можете CAST
поле в строку:
... WHERE CAST(ProductID as CHAR) LIKE '%15%'
это очень плохо для производительности, поскольку mySQL не может использовать любые индексы, созданные для столбца INT. Но тогда LIKE
всегда медленный, даже когда он выполняется в поле varchar: нет способа получить индекс, который ускоряет запрос LIKE.
Возможно, стоит иметь второй столбец varchar
, который отражает значения столбца int
и делает LIKE на этом - вам нужно было бы проверить, будет ли это хорошо.
Ответ 2
Вы можете convert int использовать строку CONVERT(ProductID, CHAR(16)) AS ProductID
, а затем использовать LIKE
. Поэтому в вашем случае это будет
SELECT ProductID, ProductName FROM Products
WHERE CONVERT(ProductID, CHAR(16)) LIKE '%15%'
Вы должны помнить, что запрос выполнит полное сканирование таблицы без поддержки индексов. В результате это будет действительно дорого и требует много времени.