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索引失效的典型案例
Jun 05 MySQL
如何使用分区处理MySQL的亿级数据优化
Jun 18 MySQL
MySQL索引是啥?不懂就问
Jul 21 MySQL
MySQL约束超详解
Sep 04 MySQL
MySQL中几种插入和批量语句实例详解
Sep 14 MySQL
MySQL数据库必备之条件查询语句
Oct 15 MySQL
MySQL利用UNION连接2个查询排序失效详解
Nov 20 MySQL
MySQL创建定时任务
Jan 22 MySQL
进阶篇之linux环境下安装MySQL数据库
Apr 09 MySQL
深入理解mysql事务隔离级别和存储引擎
Apr 12 MySQL
SQLServer常见数学函数梳理总结
Aug 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函数)
2006/10/09 PHP
php实现的Captcha验证码类实例
2014/09/22 PHP
浅谈php+phpStorm+xdebug配置方法
2015/09/17 PHP
PHP Laravel 上传图片、文件等类封装
2017/08/16 PHP
用JQuery调用Session的实现代码
2010/10/29 Javascript
jquery1.5.1中根据元素ID获取元素对象的代码
2011/04/02 Javascript
ExtJS DOM元素操作经验分享
2013/08/28 Javascript
js中如何复制一个对象并获取其所有属性和属性对应的值
2013/10/24 Javascript
JavaScript四种调用模式和this示例介绍
2014/01/02 Javascript
手写的一个兼容各种浏览器的javascript getStyle函数(获取元素的样式)
2014/06/06 Javascript
javascript制作游戏开发碰撞检测的封装代码
2015/03/31 Javascript
node.js回调函数之阻塞调用与非阻塞调用
2015/11/13 Javascript
Web程序员必备的7个JavaScript函数
2016/06/14 Javascript
JS HTML5实现拖拽移动列表效果
2020/08/27 Javascript
100行代码理解和分析vue2.0响应式架构
2017/03/09 Javascript
webpack external模块的具体使用
2018/03/10 Javascript
Vue入门之animate过渡动画效果
2018/04/08 Javascript
vue-cli2.9.3 详细教程
2018/04/23 Javascript
详解webpack的proxyTable无效的解决方案
2018/06/15 Javascript
详解VUE前端按钮权限控制
2019/04/26 Javascript
jquery 时间戳转日期过程详解
2019/10/12 jQuery
jquery validate 实现动态增加/删除验证规则操作示例
2019/10/28 jQuery
Vue根据条件添加click事件的方式
2019/11/09 Javascript
微信sdk实现禁止微信分享(使用原生php实现)
2019/11/15 Javascript
vue中h5端打开app(判断是安卓还是苹果)
2021/02/26 Vue.js
Windows系统下使用flup搭建Nginx和Python环境的方法
2015/12/25 Python
如何利用Python分析出微信朋友男女统计图
2019/01/25 Python
Pandas 重塑(stack)和轴向旋转(pivot)的实现
2019/07/22 Python
Python 类方法和实例方法(@classmethod),静态方法(@staticmethod)原理与用法分析
2019/09/20 Python
Django form表单与请求的生命周期步骤详解
2020/06/07 Python
10分钟理解CSS3 FlexBox弹性布局
2018/12/20 HTML / CSS
IdealFit官方网站:女性蛋白质、补充剂和运动服装
2019/03/24 全球购物
波兰快递服务:Globkurier.pl
2019/11/08 全球购物
库房保管员岗位职责
2014/04/07 职场文书
一次性工伤赔偿协议书范本
2014/11/25 职场文书
工程款催款函
2015/06/24 职场文书