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 07 MySQL
Idea连接MySQL数据库出现中文乱码的问题
Apr 14 MySQL
MySQL查询学习之基础查询操作
May 08 MySQL
MySQL查看表和清空表的常用命令总结
May 26 MySQL
MySQL中in和exists区别详解
Jun 03 MySQL
MySQL表类型 存储引擎 的选择
Nov 11 MySQL
实战 快速定位MySQL的慢SQL
Mar 22 MySQL
MySQL分区以及建索引的方法总结
Apr 13 MySQL
MySQL 自动填充 create_time 和 update_time
May 20 MySQL
MySQL索引失效场景及解决方案
Jul 23 MySQL
数据设计之权限的实现
Aug 05 MySQL
MySQL中LAG()函数和LEAD()函数的使用
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 第一节 php简介
2012/04/28 PHP
php变量范围介绍
2012/10/15 PHP
php使用pdo连接并查询sql数据库的方法
2014/12/24 PHP
记录Yii2框架开发微信公众号遇到的问题及解决方法
2018/07/20 PHP
浅谈php://filter的妙用
2019/03/05 PHP
yii2.0框架多模型操作示例【添加/修改/删除】
2020/04/13 PHP
脚本之家贴图转换+转贴工具用到的js代码超级推荐
2007/04/05 Javascript
javascript实现捕捉键盘上按下的键
2015/05/05 Javascript
javascript绘制漂亮的心型线效果完整实例
2016/02/02 Javascript
Javascript基础之数组的使用
2016/05/13 Javascript
jQuery实现鼠标滚动图片延迟加载效果附源码下载
2016/06/28 Javascript
学习Angular中作用域需要注意的坑
2016/08/17 Javascript
微信小程序 地图map实例详解
2017/06/07 Javascript
VUE实现表单元素双向绑定(总结)
2017/08/08 Javascript
详解JavaScript添加给定的标签选项
2018/09/17 Javascript
layui table 表格上添加日期控件的两种方法
2019/09/28 Javascript
微信小程序仿抖音短视频切换效果的实例代码
2020/06/24 Javascript
Python使用pylab库实现画线功能的方法详解
2017/06/08 Python
python定向爬虫校园论坛帖子信息
2018/07/23 Python
使用Python 统计高频字数的方法
2019/01/31 Python
程序员的七夕用30行代码让Python化身表白神器
2019/08/07 Python
python统计字符的个数代码实例
2020/02/07 Python
pycharm新建Vue项目的方法步骤(图文)
2020/03/04 Python
python通过函数名调用函数的几种场景
2020/09/23 Python
全球第二大家装零售商:Lowe’s
2018/01/13 全球购物
世界上最具创新性的增强型知名运动品牌:Proviz
2018/04/03 全球购物
Pam & Gela官网:美国性感前卫女装品牌
2018/07/19 全球购物
荷兰最大的儿童服装店:The Kids Republic
2019/04/13 全球购物
职专应届生求职信
2013/11/16 职场文书
毕业生护理专业个人求职信范文
2014/01/04 职场文书
成语的广告词
2014/03/19 职场文书
内蒙古鄂尔多斯市市长寄语
2014/04/10 职场文书
毕业评语大全
2014/05/04 职场文书
环保建议书200字
2014/05/14 职场文书
超市优秀员工获奖感言
2014/08/15 职场文书
2014年节能工作总结
2014/12/18 职场文书