在INT字段上执行LIKE比较

时间:2011-12-07 21:01:40

标签: mysql sql

我对SQL很新,我试图获得与productID的用户输入相匹配的完整产品列表。类似的东西:

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

我希望列出所有匹配的产品,例如: 15,150,2154等

不幸的是我遇到了问题,因为productID字段是INT而不是字符串。是否有一些相对简单的方法呢?

2 个答案:

答案 0 :(得分:32)

您可以CAST字段为字符串:

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

这对性能非常不利,因为mySQL无法使用它为INT列创建的任何索引。但是,即使在varchar字段上完成,LIKE也总是很慢:没有办法让索引加速LIKE查询。

可能值得拥有第二个varchar列,该列反映int列的值并对其进行LIKE - 您必须进行基准测试以确定是否它会做任何好事。

答案 1 :(得分:5)

您可以convert使用CONVERT(ProductID, CHAR(16)) AS ProductID将字符串转换为字符串,然后使用LIKE。所以在你的情况下它将是

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

您应该记住,查询将在没有索引支持的情况下进行全表扫描。因此,它将非常昂贵且耗时。