2011-12-07 12 views
20

Soy bastante nuevo en SQL y estaba tratando de obtener una lista completa de productos que coinciden con una entrada de usuario de un productID. Algo así como:Realizando una comparación LIKE en un campo INT

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

me gustaría hacer una lista de todos los productos a juego tales como: 15, 150, 2154, etc.

Desafortunadamente estoy corriendo en problemas debido a que el campo es un INT productID y no una cadena. ¿Hay alguna forma relativamente simple de evitar esto?

+1

Si la respuesta "correcta" es convertir/convertir el valor en texto, la tabla debe modificarse para convertir la columna en texto permanentemente. Esto es intuitivo porque no debería necesitar realizar cálculos matemáticos en los identificadores de productos. – onedaywhen

Respuesta

29

Usted puede CAST el campo en una cadena:

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

esto es muy malo para el rendimiento, como MySQL no puede hacer uso de cualquier índice que ha creado para la columna INT. Pero entonces, LIKE siempre es lento, incluso cuando se realiza en un campo varchar: no hay forma de tener un índice que acelere una consulta LIKE.

Puede valer la pena tener una segunda columna varchar que refleje los valores de la columna int y hacer el LIKE en esa - usted tendría que comparar para saber si le serviría de algo.

+0

¿Usar CAST más rápido que usar CONVERT? – Maxx

+1

@Maxx son sinónimos de la misma función, por lo que no hay diferencia. –

+0

{"La expresión contiene una función indefinida llamada CAST()."} Es lo que veo :( – Maxx

4

Puede convert int a string usando CONVERT(ProductID, CHAR(16)) AS ProductID y luego usar LIKE. Así que en su caso sería

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

Usted debe recordar que la consulta hará un escaneo completo de tabla sin ningún apoyo de índices. Como resultado, será realmente costoso y requerirá mucho tiempo.

+0

¿Puedes ser más específico? Soy una especie de novato :) Agregue un ejemplo, tal vez. – Maxx

+0

{"La expresión contiene una función indefinida llamada CHAR()."} Es lo que estoy viendo. – Maxx

+0

¿Qué versión de MySQL está usando? – Jan

Cuestiones relacionadas