比较数字和字母数字

时间:2019-04-14 08:54:25

标签: mysql

我正在运行以下查询

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

其返回的真实值,我很困惑为什么?

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

如果我想用123来比较'123sks',导致错误,该怎么办。

1 个答案:

答案 0 :(得分: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))