将数字与Alpha数字进行比较

问题描述 投票:0回答:1

我正在运行以下查询

SELECT * FROM `student` WHERE '123sks'=123

它的回归真实,我很困惑为什么?

我正在使用5.7.24 - MySQL社区服务器(GPL)

如果我想将'123sks'与123进行比较,我该怎么办才会导致错误。

mysql
1个回答
3
投票

来自:Type Conversion in Expression Evaluation

当运算符与不同类型的操作数一起使用时, 发生类型转换以使操作数兼容。 某些转换是隐式发生的。

要了解MySql如何进行这些类型转换,请尝试以下显式转换:

SELECT 
  cast('123abc' as unsigned),
  cast('1abc23' as unsigned),
  cast('abc123' as unsigned)

会有这样的结果:

| col1 | col2 | col3 |
| ---- | ---- | ---- |
| 123  | 1    | 0    |

您可能已经猜到,对于您尝试转换为整数的任何字符串, 结果是整数值,如果有的话,由字符串的起始数字字符组成,如果没有,则为0。 所以在你的情况下,'123sks'被转换(隐含地)转换为123。 要从比较中获得FALSE,请将123转换为字符串:

WHERE '123sks' = cast(123 as char(10))
© www.soinside.com 2019 - 2024. All rights reserved.