mysql查询比较字符串和int值

时间:2018-08-16 11:47:05

标签: mysql

我正在尝试进行如下选择查询

SELECT * FROM `corporate_names` WHERE id = '1s';

但是它仍然给我结果,因为没有列ID的值等于“ 1s”。 它使我得到SELECT * FROM corporate_names WHERE id = '1';的结果。

我不明白为什么会这样吗?我如何才能将id列与字符串值完全匹配,因为id是具有int列类型的主键。

我希望它与列值完全匹配

3 个答案:

答案 0 :(得分:1)

当运算符与不同类型的操作数一起使用时,会发生类型转换以使操作数兼容。一些转换是隐式发生的。例如,MySQL根据需要自动将数字转换为字符串,反之亦然。 例子

SELECT 1+'1'; -> 2

以下规则描述了比较操作如何发生转换:

有关详细信息,您可以阅读documentation

但是您可以按照以下方式停止它

SELECT case when  CONVERT('1s' USING utf8) = cast( 1 as char) then 2 else 0 end; this will return 0 .

因此,明确的转换是阻止这种情况或解决您的问题的方式

答案 1 :(得分:0)

如果要获取所有ID以1开头的公司名称,请使用LIKE,如下所示:

SELECT * FROM `corporate_names` WHERE id LIKE '1%';

否则,如果您只想检索特定ID的结果,请使用以下命令:

SELECT * FROM `corporate_names` WHERE id='1';

我希望有帮助。

答案 2 :(得分:0)

我如下解决

SELECT * FROM `corporate_names` where CAST(id as char(255)) = '1s'.

现在它与列值完全匹配,我只是将id列转换为char。