mysql以数字开头的字符串字段,查询条件字段值等于特定数字时,为何查询结果为以数字开头的数据

weixin_41097949 2018-07-18 04:24:09
如有一表test:id, type;
数据如下:
1,3a;
2,3b;
3, 5s;
select * from test where type = 3;
得到的结果为:请问这是为什么?
1,3a;
2,3b;
...全文
893 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
Rotel-刘志东 2018-07-19
  • 打赏
  • 举报
回复
数据类型不一样一定是做转换的,否则不同的类型怎么去对比比较。要把你的type类型转化为数字类型的。
zjcxc 2018-07-19
  • 打赏
  • 举报
回复
type=3
这两个的数据类型不一样,所以会转换为一样一类型再做比较,按照 mysql 的转换规则,会把 type 转成数字,而 3a,3b,3c 转成数字的结果就是 3,所以=3
你可以直接验证一下: select cast('3a' as signed);
同时,查询后执行 show warnings 时会看到相关的警告信息
weixin_41097949 2018-07-19
  • 打赏
  • 举报
回复
#5 zjcxc,您这么解释,我算通了,非常感谢。mysql做了转换,当查询条件为“字符串字段=数字”,mysql截取前端整数数字部分转换为整数型,再与给出的条件值比较。但mysql的这个规则不知是好还是不好。比如例中,按正常思维希望客户输入“3c”时才能看到“3c”这条记录,但客户输入3时,把“3a,3b,3c"都列出来了。
weixin_41097949 2018-07-18
  • 打赏
  • 举报
回复
二楼,您用 select * from test where type=3; 查询得出的结果是不是:
id type
1 3a
2 3b
3 3c
weixin_41097949 2018-07-18
  • 打赏
  • 举报
回复
感谢二位的热情解答,我的type是varchar型的,二楼您写的查询我能理解,我不能理解的是:我写的这个查询语句看起来应该是错误的,会报语法错误,或者查询结果为空,可结果是没有料想到的
iamboy_11 2018-07-18
  • 打赏
  • 举报
回复
根据你发的问题,我觉得应该这样写:
select * from test where type like '4%' 或者 select * from test where left(type,1) = 4
luyaran 2018-07-18
  • 打赏
  • 举报
回复
你的type的字段类型是什么啊?????
内容概要:本文介绍了如何使用 Google Earth Engine(GEE)和 geemap 库在 Jupyter 笔记本中进行地理空间数据分析与可视化。首先安装并配置 Earth Engine API 和 geemap,完成身份认证后初始化服务。接着加载最新的 Landsat 9 地表反射率数据集(LANDSAT/LC09/C02/T1_L2),通过空间位置和间排序筛选出覆盖斯坦福大学区域的最新影像,并以假彩色渲染方式展示。进一步地,利用近红外波段(SR_B5)和红光波段(SR_B4)计算归一化植被指数(NDVI),并通过自定义颜色映射(蓝-白-绿)可视化植被分布情况,揭示植被健康状况或密度信息。整个流程展示了从数据获取、处理到可视化的完整遥感分析链条。; 适合人群:具备 Python 编程基础,对遥感、地理信息系统(GIS)或环境监测感兴趣的科研人员、学生及开发者;熟悉 Jupyter Notebook 环境者更佳; 使用场景及目标:① 学习 Earth Engine 在云端处理大规模遥感数据的方法;② 掌握使用 geemap 实现交互式地图可视化技巧;③ 应用于城市绿化评估、农业监测、生态环境研究等需要植被分析的实际项目; 阅读建议:建议在 Colab 或本地 Jupyter 环境中实际运行代码,替换不同地理位置或间范围以加深理解;注意及更新项目ID并完成认证步骤以确保 Earth Engine 正常初始化。

57,063

社区成员

发帖
与我相关
我的任务
社区描述
MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧