2011-12-07 7 views
20

Sono abbastanza nuovo per SQL e stavo cercando di ottenere un elenco completo di prodotti che corrispondono a un input utente di un productID. Qualcosa di simile:Esecuzione di un confronto LIKE su un campo INT

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

lo vorrei elencare tutti i prodotti corrispondenti, quali: 15, 150, 2154, ecc

Purtroppo Sto correndo in problemi perché il campo productID è un INT e non una stringa. C'è un modo relativamente semplice intorno a questo?

+1

Se la risposta "corretta" è per convertire/eseguire il cast del valore in testo, la tabella deve essere modificata per convertire la colonna in testo in modo permanente. Questo è intuitivo perché non è necessario eseguire la matematica sugli identificatori del prodotto. – onedaywhen

risposta

29

È possibile CAST il campo in una stringa:

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

questo è molto male per le prestazioni, come MySQL non può fare uso di tutti gli indici è creato per la colonna INT. Ma poi, LIKE è sempre lento, anche se fatto su un campo varchar: non c'è modo di avere un indice che acceleri una query LIKE.

Potrebbe valere la pena di avere una seconda colonna varchar che rispecchi i valori della colonna int e che esegua il LIKE su quello - dovresti fare un benchmark per scoprire se andrà bene.

+0

sta utilizzando CAST più veloce rispetto all'utilizzo di CONVERT? – Maxx

+1

@Maxx sono sinonimi della stessa funzione, quindi non c'è differenza. –

+0

{"L'espressione contiene la funzione non definita chiamata CAST()."} È ciò che sto vedendo :( – Maxx

4

È possibile convert int a stringa utilizzando CONVERT(ProductID, CHAR(16)) AS ProductID e quindi utilizzare LIKE. Quindi nel tuo caso sarebbe

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

È necessario ricordare che la query eseguirà una scansione completa della tabella senza alcun supporto dagli indici. Di conseguenza, sarà molto costoso e dispendioso in termini di tempo.

+0

Puoi essere più specifico? Sono una specie di noob :) Aggiungi un esempio, forse. – Maxx

+0

{"L'espressione contiene una funzione non definita chiamata CHAR()."} È ciò che sto vedendo. – Maxx

+0

Quale versione di MySQL stai usando? – Jan

Problemi correlati