Подтвердить что ты не робот

Выполнение сравнения LIKE в поле INT

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

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

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

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

4b9b3361

Ответ 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%'

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