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 22 MySQL
新手必备之MySQL msi版本下载安装图文详细教程
May 21 MySQL
MySQL下使用Inplace和Online方式创建索引的教程
May 26 MySQL
如何自己动手写SQL执行引擎
Jun 02 MySQL
MySQL分区表实现按月份归类
Nov 01 MySQL
SQL基础查询和LINQ集成化查询
Jan 18 MySQL
MySQL慢查询优化解决问题
Mar 17 MySQL
mysql使用instr达到in(字符串)的效果
Apr 03 MySQL
MySQL 外连接语法之 OUTER JOIN
Apr 09 MySQL
MySQ InnoDB和MyISAM存储引擎介绍
Apr 26 MySQL
MySql中的json_extract函数处理json字段详情
Jun 05 MySQL
MySQL深分页问题解决思路
Dec 24 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实现下载生成某链接快捷方式的解决方法
2013/05/07 PHP
PHP树的深度编历生成迷宫及A*自动寻路算法实例分析
2015/03/10 PHP
PHP PDOStatement::nextRowset讲解
2019/02/01 PHP
PHP实现带进度条的Ajax文件上传功能示例
2019/07/02 PHP
PHP如何使用JWT做Api接口身份认证的实现
2020/02/03 PHP
JQuery打造PHP的AJAX表单提交实例
2009/11/03 Javascript
js最简单的拖拽效果实现代码
2010/09/24 Javascript
js控制的遮罩层实例介绍
2013/05/29 Javascript
网站404页面3秒后跳到首页的实例代码
2013/08/16 Javascript
javaScript 动态访问JSon元素示例代码
2013/08/30 Javascript
jQuery调用ajax请求的常见方法汇总
2015/03/24 Javascript
JS获取当前脚本文件的绝对路径
2016/03/02 Javascript
JavaScript兼容浏览器FF/IE技巧
2016/08/14 Javascript
javascript数组常用方法汇总
2016/09/10 Javascript
原生js编写焦点图效果
2016/12/08 Javascript
bootstrap模态框实现拖拽效果
2016/12/14 Javascript
layui文件上传实现代码
2017/05/20 Javascript
webpack v4 从dev到prd的方法
2018/04/02 Javascript
vue中使用echarts制作圆环图的实例代码
2018/07/27 Javascript
浅谈React Event实现原理
2018/09/20 Javascript
小程序实现左滑删除功能
2018/10/30 Javascript
详解Vue中的scoped及穿透方法
2019/04/18 Javascript
python中使用urllib2获取http请求状态码的代码例子
2014/07/07 Python
python使用BeautifulSoup分页网页中超链接的方法
2015/04/04 Python
Python找出9个连续的空闲端口
2016/02/01 Python
Python实现 多进程导入CSV数据到 MySQL
2017/02/26 Python
python编程实现希尔排序
2017/04/13 Python
细说NumPy数组的四种乘法的使用
2020/12/18 Python
Gtech官方网站:地毯清洁器、吸尘器及园艺设备
2018/05/23 全球购物
EMU Australia澳大利亚官网:澳大利亚本土雪地靴品牌
2019/07/24 全球购物
使用索引(Index)有哪些需要考虑的因素
2016/10/19 面试题
信息管理专业学生自荐信格式
2013/09/22 职场文书
小学后勤管理制度
2014/01/14 职场文书
2014年社区综治工作总结
2014/11/17 职场文书
大三学生英语考试作弊检讨书
2015/01/01 职场文书
浅析Python中的套接字编程
2021/06/22 Python