首页 > 解决方案 > 比较数字与字母数字

问题描述

我正在运行以下查询

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

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

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

如果我想将 '123sks' 与 123 匹配,我应该怎么做才能导致错误。

标签: mysql

解决方案


来自:表达式求值中的类型转换

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

要了解 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))

推荐阅读