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 06 MySQL
MySQL中使用or、in与union all在查询命令下的效率对比
May 26 MySQL
MySQL 8.0 驱动与阿里druid版本兼容问题解决
Jul 01 MySQL
MySQL修改默认引擎和字符集详情
Sep 25 MySQL
基于MySql验证的vsftpd虚拟用户
Nov 07 MySQL
mysql 联合索引生效的条件及索引失效的条件
Nov 20 MySQL
MySQL高级进阶sql语句总结大全
Mar 16 MySQL
详解Mysql事务并发(脏读、不可重复读、幻读)
Apr 29 MySQL
MySQL安装失败的原因及解决步骤
Jun 14 MySQL
MySQL实现字段分割一行转多行的示例代码
Jul 07 MySQL
mysqldump进行数据备份详解
Jul 15 MySQL
Mysql中mvcc各场景理解应用
Aug 05 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 allow_url_include的应用和解释
2010/04/22 PHP
thinkPHP框架实现生成条形码的方法示例
2018/06/06 PHP
Ext第一周 史上最强学习笔记---GridPanel(基础篇)
2008/12/29 Javascript
javascript 节点遍历函数
2010/03/28 Javascript
JavaScript中双叹号!!作用示例介绍
2014/09/21 Javascript
探究Javascript模板引擎mustache.js使用方法
2016/01/26 Javascript
AngularJS 实现JavaScript 动画效果详解
2016/09/08 Javascript
Vue0.1的过滤代码如何添加到Vue2.0直接使用
2017/08/23 Javascript
微信小程序下拉刷新PullDownRefresh的使用方法
2018/11/29 Javascript
Javascript读取上传文件内容/类型/字节数
2019/04/30 Javascript
nodejs实现用户登录路由功能
2019/05/22 NodeJs
小程序api实现promise封装过程解析
2019/11/21 Javascript
解决vue项目axios每次请求session不一致的问题
2020/10/24 Javascript
Python实现的彩票机选器实例
2015/06/17 Python
Python 网页解析HTMLParse的实例详解
2017/08/10 Python
使用Python快速搭建HTTP服务和文件共享服务的实例讲解
2018/06/04 Python
利用Anaconda简单安装scrapy框架的方法
2018/06/13 Python
python numpy 按行归一化的实例
2019/01/21 Python
python将三维数组展开成二维数组的实现
2019/11/30 Python
PyCharm 2019.3发布增加了新功能一览
2019/12/08 Python
tensorflow 利用expand_dims和squeeze扩展和压缩tensor维度方式
2020/02/07 Python
Django+Uwsgi+Nginx如何实现生产环境部署
2020/07/31 Python
Python爬虫之Selenium中frame/iframe表单嵌套页面
2020/12/04 Python
python工具快速为音视频自动生成字幕(使用说明)
2021/01/27 Python
技术经理的自我评价范文
2013/12/03 职场文书
出国留学介绍信
2014/01/13 职场文书
师范学院美术系毕业生自我鉴定
2014/01/29 职场文书
前处理组长岗位职责
2014/03/01 职场文书
中式婚礼主持词
2014/03/13 职场文书
绿色校园广播稿
2014/10/13 职场文书
销售2014年度工作总结
2014/12/08 职场文书
2015年班主任个人工作总结
2015/03/31 职场文书
区域销售经理岗位职责
2015/04/02 职场文书
处世之道:关于真诚相待的名言推荐
2019/12/02 职场文书
PyQt5 显示超清高分辨率图片的方法
2021/04/11 Python
深入理解java.lang.String类的不可变性
2021/06/27 Java/Android