2011-12-07 48 views
20

我對SQL相當陌生,並且試圖獲取與productID的用戶輸入相匹配的完整產品列表。喜歡的東西:對INT字段執行LIKE比較

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

我想它列出所有的配套產品,如: 15,150,2154,等等

不幸的是,我遇到了問題,因爲ProductID字段是INT而不是一個字符串。有沒有一些相對簡單的方法呢?

+1

如果「正確的」答案是將該值轉換/轉換爲文本,那麼應該修改該表以將該列永久轉換爲文本。這很直觀,因爲您不需要在產品標識符上執行數學。 – onedaywhen

回答

29

可以CAST領域的字符串:

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

這是表現非常糟糕,因爲MySQL不能使用它爲INT列創建的索引。但是,LIKE總是很慢,即使在varchar字段上完成:沒有辦法使索引加速LIKE查詢。

可能值得擁有第二個varchar列,該列反映了int列的值並對其進行了LIKE處理 - 您必須對其進行基準測試,以確定它是否會有所作爲。

+0

使用CAST比使用CONVERT更快嗎? – Maxx

+1

@Maxx它們是同一個函數的同義詞,所以沒有區別。 –

+0

{「表達式包含未定義的函數調用CAST()。」}就是我所看到的:( – Maxx

4

您可以將convert int整理爲使用CONVERT(ProductID, CHAR(16)) AS ProductID的字符串,然後使用LIKE。所以在你的情況下,它將是

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

你應該記住,查詢將進行全表掃描沒有索引的任何支持。因此,這將非常昂貴和耗時。

+0

你能更具體嗎?我是一個noob :)添加一個例子,也許。 – Maxx

+0

{「表達式包含未定義的函數調用CHAR()。」}就是我所看到的。 – Maxx

+0

你正在使用哪個MySQL版本? – Jan