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 10 MySQL
详解MySQL中的pid与socket
Jun 15 MySQL
MySql 缓存查询原理与缓存监控和索引监控介绍
Jul 02 MySQL
MySQL一些常用高级SQL语句
Jul 03 MySQL
Mysql关于数据库是否应该使用外键约束详解说明
Oct 24 MySQL
SpringBoot连接MySQL获取数据写后端接口的操作方法
Nov 02 MySQL
SQL注入详解及防范方法
Dec 06 MySQL
mysql聚集索引、辅助索引、覆盖索引、联合索引的使用
Feb 12 MySQL
一文搞清楚MySQL count(*)、count(1)、count(col)区别
Mar 03 MySQL
Nebula Graph解决风控业务实践
Mar 31 MySQL
MySQL中一条SQL查询语句是如何执行的
Apr 08 MySQL
MySQL运行报错:“Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggre”解决方法
Jun 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贪婪算法解决0-1背包问题实例分析
2015/03/23 PHP
php简单随机字符串生成方法示例
2017/04/19 PHP
linux mint下安装phpstorm2020包括JDK部分的教程详解
2020/09/17 PHP
解放web程序员的输入验证
2006/10/06 Javascript
用js实现上传图片前的预览(TX的面试题)
2007/08/14 Javascript
Javascript hasOwnProperty 方法 &amp; in 关键字
2008/11/26 Javascript
JS正则表达式大全(整理详细且实用)
2013/11/14 Javascript
分享2个jQuery插件--jquery.fileupload与artdialog
2014/12/26 Javascript
JS+CSS简单树形菜单实现方法
2015/09/12 Javascript
jQuery Validate表单验证深入学习
2015/12/18 Javascript
JavaScript实现in-place思想的快速排序方法
2016/08/07 Javascript
JQuery实现DIV其他动画效果的简单实例
2016/09/18 Javascript
微信小程序实战之上拉(分页加载)效果(2)
2017/04/17 Javascript
详解Vue文档中几个易忽视部分的剖析
2018/03/24 Javascript
JavaScript 2018 中即将迎来的新功能
2018/09/21 Javascript
vue.js仿hover效果的实现方法示例
2019/01/28 Javascript
vue 项目打包时样式及背景图片路径找不到的解决方式
2019/11/12 Javascript
Python使用Selenium+BeautifulSoup爬取淘宝搜索页
2018/02/24 Python
Django操作session 的方法
2020/03/09 Python
关于tensorflow softmax函数用法解析
2020/06/30 Python
python安装mysql的依赖包mysql-python操作
2021/01/01 Python
Charlotte Tilbury英国官网:英国彩妆品牌
2017/05/26 全球购物
英国领先的高街书籍专家:Waterstones
2018/02/01 全球购物
当x.equals(y)等于true时,x.hashCode()与y.hashCode()可以不相等,这句话对不对
2015/05/02 面试题
硕士研究生个人求职信
2013/12/04 职场文书
怎样写好自荐信和推荐信
2013/12/26 职场文书
工会换届选举方案
2014/05/21 职场文书
股东出资证明书范例
2014/10/04 职场文书
资料员岗位职责
2015/02/10 职场文书
元宵节寄语大全
2015/02/27 职场文书
大学开学典礼新闻稿
2015/07/17 职场文书
优秀乡村医生事迹材料(2016精选版)
2016/02/29 职场文书
2019西餐厅创业计划书范文!
2019/07/12 职场文书
关于拾金不昧的感谢信(五篇)
2019/10/18 职场文书
漫画「日和酱的要求是绝对的」第3卷封面公开
2022/03/21 日漫
在Oracle表中进行关键词搜索的过程
2022/06/10 Oracle