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
JDBC连接的六步实例代码(与mysql连接)
May 12 MySQL
MYSQL 无法识别中文的永久解决方法
Jun 03 MySQL
详解MySQL中的pid与socket
Jun 15 MySQL
MySQL系列之一 MariaDB-server安装
Jul 02 MySQL
SQL之各种join小结详细讲解
Aug 04 MySQL
MySQL去除重叠时间求时间差和的实现
Aug 23 MySQL
详细聊聊关于Mysql联合查询的那些事儿
Oct 24 MySQL
一文搞清楚MySQL count(*)、count(1)、count(col)区别
Mar 03 MySQL
MySQL约束(创建表时的各种条件说明)
Jun 21 MySQL
MySQL导致索引失效的几种情况
Jun 25 MySQL
mysql拆分字符串作为查询条件的示例代码
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脚本数据库功能详解(下)
2006/10/09 PHP
不错的PHP学习之php4与php5之间会穿梭一点点感悟
2007/05/03 PHP
CentOS安装php v8js教程
2015/02/26 PHP
smarty的section嵌套循环用法示例
2016/05/28 PHP
PHP实现随机数字、字母的验证码功能
2018/08/01 PHP
PHP获取真实IP及IP模拟方法解析
2020/11/24 PHP
基于jquery实现的服务器验证控件的启用和禁用代码
2010/04/27 Javascript
JavaScript性能优化 创建文档碎片(document.createDocumentFragment)
2010/07/13 Javascript
javascript字符串替换及字符串分割示例代码
2013/12/12 Javascript
JS生成随机字符串的多种方法
2014/06/10 Javascript
Javascript核心读书有感之语句
2015/02/11 Javascript
详细解密jsonp跨域请求
2015/04/15 Javascript
详解JavaScript的while循环的使用
2015/06/03 Javascript
jquery调整表格行tr上下顺序实例讲解
2016/01/09 Javascript
JS获取当前页面名称的简单实例
2016/08/19 Javascript
Vue-cli项目部署到Nginx服务器的方法
2019/11/01 Javascript
原理深度解析Vue的响应式更新比React快
2020/04/04 Javascript
JavaScript indexOf()原理及使用方法详解
2020/07/09 Javascript
解决nuxt页面中mounted、created、watch执行两遍的问题
2020/11/05 Javascript
[01:38]DOTA2辉夜杯 欢乐的观众现场采访
2015/12/26 DOTA
python ElementTree 基本读操作示例
2009/04/09 Python
利用Python如何生成便签图片详解
2018/07/09 Python
python 利用for循环 保存多个图像或者文件的实例
2018/11/09 Python
Python3基本输入与输出操作实例分析
2020/02/14 Python
tensorflow使用L2 regularization正则化修正overfitting过拟合方式
2020/05/22 Python
记一次Django响应超慢的解决过程
2020/09/17 Python
python中编写函数并调用的知识点总结
2021/01/13 Python
css3教程之倾斜页面
2014/01/27 HTML / CSS
英国在线珠宝店:The Jewel Hut
2017/03/20 全球购物
泰国办公用品购物网站:OfficeMate
2018/02/04 全球购物
Pureology官网:为染色头发打造最好的产品
2019/09/13 全球购物
TUMI香港官网:国际领先的行李箱、背囊品牌
2021/03/01 全球购物
介绍一下Ruby中的对象,属性和方法
2012/07/11 面试题
违纪学生保证书
2015/02/27 职场文书
2016年暑期教师培训心得体会
2016/01/09 职场文书
Python获取指定日期是"星期几"的6种方法
2022/03/13 Python