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 06 MySQL
详解mysql三值逻辑与NULL
May 19 MySQL
Mysql 用户权限管理实现
May 25 MySQL
mysql获取指定时间段中所有日期或月份的语句(不设存储过程,不加表)
Jun 18 MySQL
mysql脏页是什么
Jul 26 MySQL
SQL优化老出错,那是你没弄明白MySQL解释计划用法
Nov 27 MySQL
关于mysql中时间日期类型和字符串类型的选择
Nov 27 MySQL
MySQL高级进阶sql语句总结大全
Mar 16 MySQL
实战 快速定位MySQL的慢SQL
Mar 22 MySQL
MySQL GTID复制的具体使用
May 20 MySQL
MySQL数据库安装方法与图形化管理工具介绍
May 30 MySQL
MySQL 语句执行顺序举例解析
Jun 05 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
CI框架中类的自动加载问题分析
2016/11/21 PHP
详解PHP如何更好的利用PHPstorm的自动提示
2017/08/18 PHP
JavaScript 高效运行代码分析
2010/03/18 Javascript
JS代码放在head和body中的区别分析
2011/12/01 Javascript
实用的Jquery选项卡TAB示例代码
2013/08/28 Javascript
javascript 用函数语句和表达式定义函数的区别详解
2014/01/06 Javascript
JSONP之我见
2015/03/24 Javascript
基于JS代码实现当鼠标悬停表格上显示这一格的全部内容
2016/06/12 Javascript
jQuery通过ajax请求php遍历json数组到table中的代码(推荐)
2016/06/12 Javascript
jquery的checkbox,radio,select等方法小结
2016/08/30 Javascript
easyui form validate总是返回false的原因及解决方法
2016/11/07 Javascript
微信小程序 生命周期和页面的生命周期详细介绍
2017/01/19 Javascript
JS实现微信摇一摇原理解析
2017/07/22 Javascript
nodejs 使用 js 模块的方法实例详解
2018/12/04 NodeJs
微信公众号H5支付接口调用方法
2019/01/10 Javascript
JS实现的杨辉三角【帕斯卡三角形】算法示例
2019/02/26 Javascript
JavaScript中变量提升机制示例详解
2019/12/27 Javascript
[03:57]《不朽》——2015DOTA2国际邀请赛—中国军团出征主题曲MV
2015/07/15 DOTA
python实现问号表达式(?)的方法
2013/11/27 Python
Python中is与==判断的区别
2017/03/28 Python
Python使用回溯法子集树模板解决迷宫问题示例
2017/09/01 Python
ubuntu安装sublime3并配置python3环境的方法
2018/03/15 Python
python实现简单的单变量线性回归方法
2018/11/08 Python
在django-xadmin中APScheduler的启动初始化实例
2019/11/15 Python
Python爬虫之Selenium实现关闭浏览器
2020/12/04 Python
Python基础进阶之海量表情包多线程爬虫功能的实现
2020/12/17 Python
python爬虫利用代理池更换IP的方法步骤
2021/02/21 Python
英国派对礼服和连衣裙购物网站:TFNC London
2018/07/07 全球购物
异常和异常类的概念
2014/09/12 面试题
抽象类和接口的区别
2012/09/19 面试题
Set里的元素是不能重复的,那么用什么方法来区分重复与否呢? 是用==还是equals()? 它们有何区别?
2014/07/27 面试题
女大学生毕业找工作的自我评价
2013/10/03 职场文书
高一学生评语大全
2014/04/25 职场文书
捐款倡议书怎么写
2014/05/13 职场文书
2014年社区民政工作总结
2014/12/02 职场文书
幼师求职自荐信
2015/03/26 职场文书