在INT字段上执行LIKE比较

Max*_*axx 23 mysql sql

我是SQL的新手,我试图获得与productID的用户输入匹配的完整产品列表.就像是:

SELECT ProductID, ProductName FROM Products WHERE ProductID LIKE '%15%'
Run Code Online (Sandbox Code Playgroud)

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

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

Pek*_*ica 33

你可以CAST将字段转换为字符串:

 ... WHERE CAST(ProductID as CHAR) LIKE '%15%'
Run Code Online (Sandbox Code Playgroud)

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

可能值得拥有一个varchar反映int列值并在那个上做LIKE 的第二列- 您必须进行基准测试以确定它是否会有任何好处.

  • @Maxx 它们是同一个函数的同义词,所以没有区别。 (2认同)
  • SQL Server管理器?这是在SQL Server还是MySQL上?另外,发布您的C#代码. (2认同)

Jan*_*Jan 5

您可以使用int int 转换为string CONVERT(ProductID, CHAR(16)) AS ProductID,然后使用LIKE.所以在你的情况下它会

SELECT ProductID, ProductName FROM Products
WHERE CONVERT(ProductID, CHAR(16)) LIKE '%15%'
Run Code Online (Sandbox Code Playgroud)

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