MySQL数据库中varchar类型的数字比较大小的方法


Posted in MySQL onNovember 17, 2021

创建测试表

-- ----------------------------
-- Table structure for check_test
-- ----------------------------
DROP TABLE IF EXISTS `check_test`;
CREATE TABLE `check_test` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `current_price` varchar(10) NOT NULL,
  `price` varchar(10) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=9 DEFAULT CHARSET=utf8;
 
-- ----------------------------
-- Records of check_test
-- ----------------------------
INSERT INTO `check_test` VALUES ('1', '12', '14');
INSERT INTO `check_test` VALUES ('2', '22', '33');
INSERT INTO `check_test` VALUES ('3', '15', '8');
INSERT INTO `check_test` VALUES ('4', '9', '7');
INSERT INTO `check_test` VALUES ('5', '12', '12.9');

MySQL数据库中varchar类型的数字比较大小的方法

MySQL数据库中varchar类型的数字比较大小的方法

我们执行如下SQL:

-- 找出current_price比price小的记录
select * from check_test where current_price<price;
select * from check_test where (current_price+0)<(price+0);
 
-- 找出current_price比price大的记录
select * from check_test where current_price>price;
select * from check_test where (current_price+0)>(price+0);

结果如下:

MySQL数据库中varchar类型的数字比较大小的方法

 我们可以看到在结果1中15>8不符合条件却查询到了,而结果3中15>8满足条件却并没有查询出来。

这是为什么呢?因为字符串类型的数字比较大小是从第一位开始比较其在字符编码中对应的数值大小,相等则继续比较第二位,不相等就是数值大的为大。其中数字字符对应的ASCII码值如下:

MySQL数据库中varchar类型的数字比较大小的方法

 例如:

  • 如果current_price="12"、price="14",其中第1位字符"1"所对应的ASCII十进制数值都是49,二者相等,而第二位字符"2"的ASCII十进制数值是50,"4"的ASCII十进制数值是52,50<52,所以结果正确。
  • 如果current_price="15"、price="8",其中current_price中的第1位字符"1"所对应的ASCII十进制数值是49,而price中的第1位字符"8"所对应的ASCII十进制数值是56,49<56,所以能够查询出来,但却并不是我们期望的结果。

我们可以通过代码来进行验证,这里用的是JavaScript语言:

var current_price = "12";
var price = "14";
console.log(current_price < price);// true
 
var current_price = "15";
var price = "8";
console.log(current_price < price);// true

所以对于可能要比较大小的数字不应该设置为varchar类型,但如果已经设置为了varchar类型,那么如果要比较则将其转换成数值类型进行比较,在SQL中中对字段加0即可。

而如果是编程语言则需要通过对应的函数进行转换,不能加0直接转换,如JavaScript:

var current_price = "12";
var price = "14";
console.log(parseInt(current_price) < parseInt(price));// true
 
var current_price = "15";
var price = "8";
console.log(parseInt(current_price) < parseInt(price));// false

注意:字符所对应的十进制数值跟其编码有关系,但ASCII码都被兼容。

参考链接:

字符串类型的数字比较大小

VARCHAR类型的字符串比较大小

varchar类型的数字比较大小

到此这篇关于MySQL数据库中varchar类型的数字比较大小的方法的文章就介绍到这了,更多相关MySQL varchar数字比较大小内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

MySQL 相关文章推荐
MySQL 覆盖索引的优点
May 19 MySQL
MYSQL 无法识别中文的永久解决方法
Jun 03 MySQL
探究Mysql模糊查询是否区分大小写
Jun 11 MySQL
MySQL系列之十一 日志记录
Jul 02 MySQL
MySQL系列之十二 备份与恢复
Jul 02 MySQL
为什么MySQL分页用limit会越来越慢
Jul 25 MySQL
Node-Red实现MySQL数据库连接的方法
Aug 07 MySQL
mysql配置SSL证书登录的实现
Sep 04 MySQL
一次SQL如何查重及去重的实战记录
Mar 13 MySQL
一文了解MYSQL三大范式和表约束
Apr 03 MySQL
mysql拆分字符串作为查询条件的示例代码
Jul 07 MySQL
MySQL 原理优化之Group By的优化技巧
Aug 14 MySQL
MySQL和Oracle批量插入SQL的通用写法示例
Nov 17 #MySQL
SQL 聚合、分组和排序
Nov 11 #MySQL
SQL基础的查询语句
Nov 11 #MySQL
MySQL之select、distinct、limit的使用
Nov 11 #MySQL
MySQL表类型 存储引擎 的选择
Nov 11 #MySQL
一文带你探究MySQL中的NULL
Nov 11 #MySQL
mysql函数全面总结
Nov 11 #MySQL
You might like
用PHP开发GUI
2006/10/09 PHP
php的mkdir()函数创建文件夹比较安全的权限设置方法
2014/07/28 PHP
在IE中调用javascript打开Excel的代码(downmoon原作)
2007/04/02 Javascript
一些常用的JS功能函数(2009-06-04更新)
2009/06/04 Javascript
jQuery解决iframe高度自适应代码
2009/12/20 Javascript
JQuery中serialize()用法实例分析
2015/02/06 Javascript
分享jQuery插件的学习笔记
2016/01/14 Javascript
Angular.js与Bootstrap相结合实现手风琴菜单代码
2016/04/13 Javascript
基于Bootstrap的Metronic框架实现页面链接收藏夹功能
2016/08/29 Javascript
JS实现的简单四则运算计算器功能示例
2017/09/27 Javascript
关于vue中watch检测到不到对象属性的变化的解决方法
2018/02/08 Javascript
浅谈vuepress 踩坑记
2018/04/18 Javascript
vuejs选中当前样式active的实例
2018/08/22 Javascript
vuex的module模块用法示例
2018/11/12 Javascript
vscode配置vue下的es6规范自动格式化详解
2019/03/20 Javascript
python中django框架通过正则搜索页面上email地址的方法
2015/03/21 Python
Python的设计模式编程入门指南
2015/04/02 Python
Python爬取APP下载链接的实现方法
2016/09/30 Python
Python callable()函数用法实例分析
2018/03/17 Python
Python调用graphviz绘制结构化图形网络示例
2019/11/22 Python
python自动脚本的pyautogui入门学习
2020/04/01 Python
安装并免费使用Pycharm专业版(学生/教师)
2020/09/24 Python
pycharm 2020 1.1的安装流程
2020/09/29 Python
远程Wi-Fi宠物监控相机:Petcube
2017/04/26 全球购物
莫斯科绝对前卫最秘密的商店:SVMoscow
2017/10/23 全球购物
哈萨克斯坦最大的时装、鞋子和配饰在线商店:Lamoda.kz
2019/11/19 全球购物
Armor Lux法国官方网站:水手服装、成衣和内衣
2020/05/26 全球购物
存储过程的优缺点是什么
2015/01/10 面试题
abstract是什么意思
2012/02/12 面试题
如何整合JQuery和Prototype
2014/01/31 面试题
大学毕业寄语大全
2014/04/10 职场文书
酒店节能降耗方案
2014/05/08 职场文书
制冷与空调专业毕业生推荐信
2014/07/07 职场文书
人口与计划生育目标管理责任书
2014/07/29 职场文书
九一八事变演讲稿
2014/09/05 职场文书
开幕式邀请函
2015/01/31 职场文书