mysql - 比较数字与字母数字
问题描述
我正在运行以下查询
SELECT * FROM `student` WHERE '123sks'=123
它回归真实,我很困惑为什么?
我正在使用 5.7.24 - MySQL 社区服务器 (GPL)
如果我想将 '123sks' 与 123 匹配,我应该怎么做才能导致错误。
解决方案
来自:表达式求值中的类型转换
当运算符与不同类型的操作数一起使用时,
会发生类型转换以使操作数兼容。
一些转换是隐式发生的。
要了解 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))
推荐阅读
- ruby-on-rails - 对象的打印属性
- asp.net-core - ASP.NET MVC 控制器 - TempData 在本地工作正常,但不能作为 ASP.NET Core Web 应用程序
- angular - 是否有使用 ng-toolkit/universal 注入本地存储的不同方法?
- ios - 是否可以列出/访问 ios 应用更新后存储的文件?
- spotfire - 我可以将值列表粘贴到过滤器的搜索框中吗?
- javascript - Jasmine spyOn 报告函数在没有被调用时被调用
- python - 绘制 K 折交叉验证的 ROC 曲线
- scala - 当我关闭 zipoutputstream 时,与之关联的写入器对象是否也会被 GC 关闭和清理
- codeigniter - 找不到类'ZipArchive'
- android - Detekt:自动更正功能不起作用