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 29 MySQL
虚拟机linux端mysql数据库无法远程访问的解决办法
May 26 MySQL
mysql如何配置白名单访问
Jun 30 MySQL
Mysql排序的特性详情
Nov 01 MySQL
SQL注入详解及防范方法
Dec 06 MySQL
Mysql中一千万条数据怎么快速查询
Dec 06 MySQL
Mysql分库分表之后主键处理的几种方法
Feb 15 MySQL
分析MySQL优化 index merge 后引起的死锁
Apr 19 MySQL
MySql中的json_extract函数处理json字段详情
Jun 05 MySQL
MySQL串行化隔离级别(间隙锁实现)
Jun 16 MySQL
MySQL控制流函数(-if ,elseif,else,case...when)
Jul 07 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中配置文件操作 如config.php文件的读取修改等操作
2012/07/07 PHP
Thinkphp模板中截取字符串函数简介
2014/06/17 PHP
php解析url并得到url中的参数及获取url参数的四种方式
2015/10/26 PHP
PHP机器学习库php-ml的简单测试和使用方法
2017/07/14 PHP
基于ThinkPHP删除目录及目录文件函数
2020/10/28 PHP
ExtJs 表单提交登陆实现代码
2010/08/19 Javascript
node.js中的fs.appendFile方法使用说明
2014/12/17 Javascript
javascript下拉框选项单击事件的例子分享
2015/03/04 Javascript
js实现黑色简易的滑动门网页tab选项卡效果
2015/08/31 Javascript
JavaScript简单获取页面图片原始尺寸的方法
2016/06/21 Javascript
JS数组排序方法实例分析
2016/12/16 Javascript
JavaScript遍历DOM元素的常见方式示例
2019/02/16 Javascript
史上最为详细的javascript继承(推荐)
2019/05/18 Javascript
Vue基础配置讲解
2019/11/29 Javascript
vue搜索页开发实例代码详解(热门搜索,历史搜索,淘宝接口演示)
2020/04/11 Javascript
Python多进程通信Queue、Pipe、Value、Array实例
2014/11/21 Python
使用Python脚本生成随机IP的简单方法
2015/07/30 Python
Python语言描述连续子数组的最大和
2018/01/04 Python
Python获取指定文件夹下的文件名的方法
2018/02/06 Python
详解python的argpare和click模块小结
2019/03/31 Python
网易有道2017内推编程题 洗牌(python)
2019/06/19 Python
Python pandas库中的isnull()详解
2019/12/26 Python
python通过安装itchat包实现微信自动回复收到的春节祝福
2020/01/19 Python
Python图像处理库PIL的ImageGrab模块介绍详解
2020/02/26 Python
matplotlib教程——强大的python作图工具库
2020/10/15 Python
一家专门做特卖的网站:唯品会
2016/10/09 全球购物
英国剑桥包中文官网:The Cambridge Satchel Company中国
2018/11/06 全球购物
个人简历中的自我评价范例
2013/10/29 职场文书
函授教育个人学习的自我评价
2013/12/31 职场文书
赔偿协议书范本
2014/09/12 职场文书
2014年行政部工作总结
2014/11/19 职场文书
老公写给老婆的检讨书
2015/05/06 职场文书
师范生见习自我总结
2015/06/23 职场文书
oracle表分区的概念及操作
2021/04/24 Oracle
使用CSS自定义属性实现骨架屏效果
2022/06/21 HTML / CSS
小程序自定义轮播图圆点组件
2022/06/25 Javascript