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 08 MySQL
mysql数据库入门第一步之创建表
May 14 MySQL
MySQL大小写敏感的注意事项
May 24 MySQL
MySQL中的布尔值,怎么存储false或true
Jun 04 MySQL
SQL实现LeetCode(197.上升温度)
Aug 07 MySQL
MyBatis 动态SQL全面详解
Oct 05 MySQL
MySQL之MyISAM存储引擎的非聚簇索引详解
Mar 03 MySQL
详细聊一聊mysql的树形结构存储以及查询
Apr 05 MySQL
mysql 乱码 字符集latin1转UTF8
Apr 19 MySQL
Mysql 文件配置解析介绍
May 06 MySQL
mysql 获取相邻数据项
May 11 MySQL
前端传参数进行Mybatis调用mysql存储过程执行返回值详解
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
第一节--面向对象编程
2006/11/16 PHP
使用PHP实现Mysql读写分离
2013/06/28 PHP
php的XML文件解释类应用实例
2014/09/22 PHP
php提交过来的数据生成为txt文件
2016/04/28 PHP
Extjs ajax同步请求时post方式参数发送方式
2009/08/05 Javascript
javascript设置金额样式转换保留两位小数示例代码
2013/12/04 Javascript
Javascript 学习笔记之 对象篇(二) : 原型对象
2014/06/24 Javascript
在AngularJS中如何使用谷歌地图把当前位置显示出来
2016/01/25 Javascript
关于JavaScript作用域你想知道的一切
2016/02/04 Javascript
JS实现按钮颜色切换效果
2020/09/05 Javascript
Vue.js递归组件构建树形菜单
2017/12/24 Javascript
JavaScript作用域、闭包、对象与原型链概念及用法实例总结
2018/08/20 Javascript
JavaScript代码压缩工具UglifyJS和Google Closure Compiler的基本用法
2020/04/13 Javascript
Python3实现的腾讯微博自动发帖小工具
2013/11/11 Python
Python中的Classes和Metaclasses详解
2015/04/02 Python
python实现将html表格转换成CSV文件的方法
2015/06/28 Python
分享Python字符串关键点
2015/12/13 Python
python 文件操作api(文件操作函数)
2016/08/28 Python
Python2实现的图片文本识别功能详解
2018/07/11 Python
Python一句代码实现找出所有水仙花数的方法
2018/11/13 Python
树莓派4B安装Tensorflow的方法步骤
2020/07/16 Python
python实现简单的五子棋游戏
2020/09/01 Python
CSS3实现文字波浪线效果示例代码
2016/11/20 HTML / CSS
深入解析HTML5使用SVG图像时的viewBox属性用法
2015/09/02 HTML / CSS
英国复古和经典球衣网站:Vintage Football Shirts
2018/10/05 全球购物
Senreve官网:美国旧金山的奢侈手袋品牌
2019/03/21 全球购物
傲盾软件面试题
2015/08/17 面试题
与UNIX有关的几个名词
2015/09/17 面试题
园林技术个人的自我评价
2014/02/15 职场文书
2014年销售工作总结与计划
2014/12/01 职场文书
家装电话营销开场白
2015/05/29 职场文书
追悼会家属答谢词
2015/09/29 职场文书
2016小学新学期寄语
2015/12/04 职场文书
原来实习报告是这样写的呀!
2019/07/03 职场文书
golang http使用踩过的坑与填坑指南
2021/04/27 Golang
一篇文章带你学习Mybatis-Plus(新手入门)
2021/08/02 Java/Android