Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2012/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 对整型字段执行类似比较_Mysql_Sql - Fatal编程技术网

Mysql 对整型字段执行类似比较

Mysql 对整型字段执行类似比较,mysql,sql,Mysql,Sql,我对SQL相当陌生,我试图获得一个与productID的用户输入相匹配的产品的完整列表。比如: SELECT ProductID, ProductName FROM Products WHERE ProductID LIKE '%15%' 我希望它列出所有匹配的产品,例如: 15、150、2154等 不幸的是,我遇到了问题,因为productID字段是一个INT而不是字符串。有没有相对简单的方法解决这个问题?您可以使用CONVERTProductID、CHAR16作为ProductID将int

我对SQL相当陌生,我试图获得一个与productID的用户输入相匹配的产品的完整列表。比如:

SELECT ProductID, ProductName FROM Products WHERE ProductID LIKE '%15%'
我希望它列出所有匹配的产品,例如: 15、150、2154等

不幸的是,我遇到了问题,因为productID字段是一个INT而不是字符串。有没有相对简单的方法解决这个问题?

您可以使用CONVERTProductID、CHAR16作为ProductID将int转换为字符串,然后使用LIKE。所以在你的情况下是这样的

SELECT ProductID, ProductName FROM Products
WHERE CONVERT(ProductID, CHAR(16)) LIKE '%15%'
您应该记住,查询将在没有索引支持的情况下进行完整的表扫描。因此,这将非常昂贵和耗时。

您可以将字段转换为字符串:

 ... WHERE CAST(ProductID as CHAR) LIKE '%15%'
这对性能非常不利,因为mySQL无法使用为INT列创建的任何索引。但是,LIKE总是很慢,即使是在varchar字段上执行时也是如此:没有办法使用索引来加速LIKE查询


第二个varchar列镜像int列的值,并在该列上执行类似操作可能是值得的-您必须对其进行基准测试,以确定它是否有任何好处。

使用CAST比使用CONVERT快吗?@Maxx它们是同一函数的同义词,因此没有区别。{表达式包含未定义的函数调用CAST。}我看到的是:@Maxx SELECT ProductID,ProductName来自产品,其中CASTProductID作为字符“%15%”应该可以工作。SQL Server管理器?在SQL Server或MySQL上也是这样吗?另外,发布您的C代码。{表达式包含未定义的函数调用字符。}这就是我看到的。您使用的是哪个MySQL版本?如果正确的答案是将值转换/强制转换为文本,那么应该修改表以将列永久转换为文本。这很直观,因为您不需要对产品标识符执行数学运算。