我對SQL相當陌生,並且試圖獲取與productID的用戶輸入相匹配的完整產品列表。喜歡的東西:對INT字段執行LIKE比較
SELECT ProductID, ProductName FROM Products WHERE ProductID LIKE '%15%'
我想它列出所有的配套產品,如: 15,150,2154,等等
不幸的是,我遇到了問題,因爲ProductID字段是INT而不是一個字符串。有沒有一些相對簡單的方法呢?
我對SQL相當陌生,並且試圖獲取與productID的用戶輸入相匹配的完整產品列表。喜歡的東西:對INT字段執行LIKE比較
SELECT ProductID, ProductName FROM Products WHERE ProductID LIKE '%15%'
我想它列出所有的配套產品,如: 15,150,2154,等等
不幸的是,我遇到了問題,因爲ProductID字段是INT而不是一個字符串。有沒有一些相對簡單的方法呢?
可以CAST
領域的字符串:
... WHERE CAST(ProductID as CHAR) LIKE '%15%'
這是表現非常糟糕,因爲MySQL不能使用它爲INT列創建的索引。但是,LIKE
總是很慢,即使在varchar字段上完成:沒有辦法使索引加速LIKE查詢。
可能值得擁有第二個varchar
列,該列反映了int
列的值並對其進行了LIKE處理 - 您必須對其進行基準測試,以確定它是否會有所作爲。
您可以將convert int整理爲使用CONVERT(ProductID, CHAR(16)) AS ProductID
的字符串,然後使用LIKE
。所以在你的情況下,它將是
SELECT ProductID, ProductName FROM Products
WHERE CONVERT(ProductID, CHAR(16)) LIKE '%15%'
你應該記住,查詢將進行全表掃描沒有索引的任何支持。因此,這將非常昂貴和耗時。
如果「正確的」答案是將該值轉換/轉換爲文本,那麼應該修改該表以將該列永久轉換爲文本。這很直觀,因爲您不需要在產品標識符上執行數學。 – onedaywhen