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 05 MySQL
MySQL令人咋舌的隐式转换
Apr 05 MySQL
Mysql 如何批量插入数据
Apr 06 MySQL
详解MySQL主从复制及读写分离
May 07 MySQL
如何用Navicat操作MySQL
May 12 MySQL
详解MySQL数据库千万级数据查询和存储
May 18 MySQL
分析MySQL抛出异常的几种常见解决方式
May 18 MySQL
为什么MySQL选择Repeatable Read作为默认隔离级别
Jul 26 MySQL
SQL实现LeetCode(180.连续的数字)
Aug 04 MySQL
Mysql 如何合理地统计一个数据库里的所有表的数据量
Apr 18 MySQL
MySQL 表锁定 LOCK和UNLOCK TABLES的 SQL语法
Apr 18 MySQL
mysql数据库隔离级别详解
Jun 16 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入门学习知识点二 PHP简单的分页过程与原理
2011/07/14 PHP
常见PHP数据库解决方案分析介绍
2015/09/24 PHP
ThinkPHP连接Oracle数据库
2016/04/22 PHP
CentOS7系统搭建LAMP及更新PHP版本操作详解
2020/03/26 PHP
模拟select的代码
2011/10/19 Javascript
jQuery学习笔记之toArray()
2014/06/09 Javascript
JS实现简单的键盘打字的效果
2015/04/24 Javascript
深入解析JavaScript中的立即执行函数
2016/05/21 Javascript
让html元素随浏览器的大小自适应垂直居中的实现方法
2016/10/12 Javascript
简单实现js无缝滚动效果
2017/02/05 Javascript
jQuery实现select下拉框获取当前选中文本、值、索引
2017/05/08 jQuery
详解JavaScript调用栈、尾递归和手动优化
2017/06/03 Javascript
JScript实现地址选择功能
2017/08/15 Javascript
webstorm+vue初始化项目的方法
2018/10/18 Javascript
Vue源码之关于vm.$delete()/Vue.use()内部原理详解
2019/05/01 Javascript
VUE写一个简单的表格实例
2019/08/06 Javascript
jQuery zTree插件使用简单教程
2019/08/16 jQuery
vue ajax 拦截原理与实现方法示例
2019/11/29 Javascript
js实现二级联动简单实例
2020/01/11 Javascript
VsCode里的Vue模板的实现
2020/08/12 Javascript
vue任意关系组件通信与跨组件监听状态vue-communication
2020/10/18 Javascript
vue 防止页面加载时看到花括号的解决操作
2020/11/09 Javascript
Python使用sftp实现上传和下载功能(实例代码)
2017/03/14 Python
3个用于数据科学的顶级Python库
2018/09/29 Python
一步步教你用python的scrapy编写一个爬虫
2019/04/17 Python
Python任务自动化工具tox使用教程
2020/03/17 Python
python字符串判断密码强弱
2020/03/18 Python
python 使用paramiko模块进行封装,远程操作linux主机的示例代码
2020/12/03 Python
Pycharm制作搞怪弹窗的实现代码
2021/02/19 Python
css3与html5实现响应式导航菜单(导航栏)效果分享
2014/02/12 HTML / CSS
加拿大消费电子和手机购物网站:The Source
2017/01/28 全球购物
2014领导班子四风问题对照检查材料思想汇报
2014/09/21 职场文书
2014年教育工作总结
2014/11/26 职场文书
单位接收函格式
2015/01/30 职场文书
《穷人》教学反思
2016/02/19 职场文书
受欢迎的自荐信,就这么写!
2019/04/19 职场文书