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查询的控制语句图文详解
Apr 11 MySQL
MySQL获取所有分类的前N条记录
May 07 MySQL
MySQL 逻辑备份与恢复测试的相关总结
May 14 MySQL
Mysql基础知识点汇总
May 26 MySQL
MySQL REVOKE实现删除用户权限
Jun 18 MySQL
Mysql数据库值的添加、修改、删除及清空操作实例
Jun 20 MySQL
MySQL 聚合函数排序
Jul 16 MySQL
mysql事务对效率的影响分析总结
Oct 24 MySQL
mysql 联合索引生效的条件及索引失效的条件
Nov 20 MySQL
在MySQL中你成功的避开了所有索引
Apr 20 MySQL
MySQL事务的隔离级别详情
Jul 15 MySQL
MySQL索引失效十种场景与优化方案
May 08 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提示Notice: Undefined variable的解决办法
2012/11/24 PHP
php不使用插件导出excel的简单方法
2014/03/04 PHP
PHP人民币金额转大写实例代码
2015/10/02 PHP
基于jquery的让页面控件不可用的实现代码
2010/04/27 Javascript
JavaScript性能陷阱小结(附实例说明)
2010/12/28 Javascript
基于jquery的大众点评,分类导航实现代码
2011/08/23 Javascript
jQuery解决下拉框select设宽度时IE 6/7/8下option超出显示不全
2013/05/27 Javascript
jQuery操作Select的Option上下移动及移除添加等等
2013/11/18 Javascript
javascript利用apply和arguments复用方法
2013/11/25 Javascript
JS保留两位小数,多位小数的示例代码
2014/01/07 Javascript
javascript 通用loading动画效果实例代码
2014/01/14 Javascript
jQuery使用之设置元素样式用法实例
2015/01/19 Javascript
js实现多选项切换导航菜单的方法
2015/02/06 Javascript
js实现文字跟随鼠标移动而移动的方法
2015/02/28 Javascript
JS实现横向与竖向两个选项卡Tab联动的方法
2015/09/27 Javascript
原生javascript实现解析XML文档与字符串
2016/03/01 Javascript
Jquery实现的简单轮播效果【附实例】
2016/04/19 Javascript
domReady的实现案例
2016/11/23 Javascript
JQuery学习总结【一】
2016/12/01 Javascript
javascript表达式和运算符详解
2017/02/07 Javascript
vue父组件点击触发子组件事件的实例讲解
2018/02/08 Javascript
vue2.0 根据状态值进行样式的改变展示方法
2018/03/13 Javascript
JavaScript实现滑动门效果
2020/01/18 Javascript
Python语言实现获取主机名根据端口杀死进程
2016/03/31 Python
pyenv命令管理多个Python版本
2017/03/26 Python
pycharm 将django中多个app放到同个文件夹apps的处理方法
2018/05/30 Python
django如何自己创建一个中间件
2019/07/24 Python
Python grequests模块使用场景及代码实例
2020/08/10 Python
英语道歉信范文
2014/01/09 职场文书
励志演讲稿800字
2014/08/21 职场文书
设立有限责任公司出资协议书
2014/11/01 职场文书
安全员岗位职责
2015/02/10 职场文书
酒店温馨提示语
2015/07/14 职场文书
《确定位置》教学反思
2016/02/18 职场文书
房屋买卖定金协议书
2016/03/21 职场文书
2016个人廉洁自律承诺书
2016/03/25 职场文书