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 infobright的安装步骤
Apr 07 MySQL
MySQL之PXC集群搭建的方法步骤
May 25 MySQL
详解MySQL中的pid与socket
Jun 15 MySQL
QT连接MYSQL数据库的详细步骤
Jul 07 MySQL
MySQL8.0升级的踩坑历险记
Nov 01 MySQL
全面盘点MySQL中的那些重要日志文件
Nov 27 MySQL
MySQL的索引你了解吗
Mar 13 MySQL
MySQL学习之基础命令实操总结
Mar 19 MySQL
MySQL派生表联表查询实战过程
Mar 20 MySQL
MySQL实现配置主从复制项目实践
Mar 31 MySQL
WINDOWS下安装mysql 8.x 的方法图文教程
Apr 19 MySQL
mysql sql常用语句大全
Jun 21 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
Win2003下APACHE+PHP5+MYSQL4+PHPMYADMIN 的简易安装配置
2006/11/18 PHP
php读取文件内容的三种可行方法示例介绍
2014/02/08 PHP
五款PHP代码重构工具推荐
2014/10/14 PHP
ThinkPHP在新浪SAE平台的部署实例
2014/10/31 PHP
解决Laravel 不能创建 migration 的问题
2019/10/09 PHP
jquery blockUI 遮罩不能消失与不能提交的解决方法
2011/09/17 Javascript
Js参数值中含有单引号或双引号问题的解决方法
2013/11/06 Javascript
一个字符串反转函数可实现字符串倒序
2014/09/15 Javascript
jQuery判断元素是否显示 是否隐藏的简单实现代码
2016/05/19 Javascript
JS打印组合功能
2016/08/04 Javascript
Angular和Vue双向数据绑定的实现原理(重点是vue的双向绑定)
2016/11/22 Javascript
100行代码理解和分析vue2.0响应式架构
2017/03/09 Javascript
原生JS实现隐藏显示图片 JS实现点击切换图片效果
2021/01/27 Javascript
详解如何将 Vue-cli 改造成支持多页面的 history 模式
2017/11/20 Javascript
详解Vue组件之作用域插槽
2018/11/22 Javascript
轻松解决JavaScript定时器越走越快的问题
2019/05/13 Javascript
vant picker+popup 自定义三级联动案例
2020/11/04 Javascript
深入解析Python中的线程同步方法
2016/06/14 Python
Python正则表达式常用函数总结
2017/06/24 Python
django配置连接数据库及原生sql语句的使用方法
2019/03/03 Python
Python操作rabbitMQ的示例代码
2019/03/19 Python
Python在Matplotlib图中显示中文字体的操作方法
2019/07/29 Python
python如何使用socketserver模块实现并发聊天
2019/12/14 Python
tensorflow 模型权重导出实例
2020/01/24 Python
ubuntu 安装pyqt5和卸载pyQt5的方法
2020/03/24 Python
iPython pylab模式启动方式
2020/04/24 Python
斐乐美国官方网站:FILA美国
2019/03/01 全球购物
英国PC组件和在线电脑商店:SCAN
2019/04/18 全球购物
Interflora澳大利亚:同日鲜花速递
2019/06/25 全球购物
英国时尚和家居用品零售商:Matalan
2021/02/28 全球购物
学习型党组织建设经验材料
2014/05/26 职场文书
旅游与环境专业求职信
2014/06/05 职场文书
教师党员承诺书2015
2015/01/21 职场文书
2015年上半年计生工作总结
2015/03/30 职场文书
2015年个人招商工作总结
2015/04/25 职场文书
Python办公自动化解决world文件批量转换
2021/09/15 Python