001和005能用mysql中max比较吗?

'10'开头为1,'9'开头为9首尾字符即可分出大小,这样文本数字'10'就会小于文本数字'9'。我们再来看看001和005,则不论是按数字类型还是按文本类型比较均为前者小于后者,按数字比较的话自然1小于5,若按字串比较,前两位打成平手到第三个字符时就分出了大小。数据库中字符和字串比较大小的排序规则...
001和005能用mysql中max比较吗?
在数据库中当然是可以对001和005使用聚合函数max()进行大小比较的,但是我们必须要留意文本型数值和数字型数值在比较数值大小时,数据库引擎对不同的字段数据类型其比较的结果可能会有所不同!下面举例说明一下:
比如 10和9,按数字比较大小则 10>9,但是如果按文本比较大小则 '10'<'9',因为两个字串比较大小时是从左边第一个字符开始逐个字符进行比较的,一旦分出高低,比较将立即结束不再进行余下比较。'10'开头为1,'9'开头为9首尾字符即可分出大小,这样文本数字'10'就会小于文本数字'9'。我们再来看看001和005,则不论是按数字类型还是按文本类型比较均为前者小于后者,按数字比较的话自然1小于5,若按字串比较,前两位打成平手到第三个字符时就分出了大小。
数据库中字符和字串比较大小的排序规则基本上与我们日常使用的字词典里的排序规则相互吻合,两个字符或字串根据它们在字典中的排序位置我们通常不必依赖电脑运算就可以判断出谁大谁小。
现在我们实测一下使用聚合函数Max()对比文本数据类型字段和数字类型字段的比较结果,以下是SQL实验代码:
drop table if exists t2;
-- 创建测试表t2含文本数据型“数字”字段和数字类型字段
create table t2(id int auto_increment primary key,
charNum varchar(10),digitNum int);
-- 插入测试数据
insert into t2(charNum,digitNum) values
('001',1),('005',5),('0010',10);
-- 查看待测数据
select * from t2;
-- 直接选出文本“数字”字段中的最大值和数字字段中的最大值
select max(charNum) as maxCharNum,
max(digitNum) as maxDigitNum from t2;
-- 将文本“数字”字段转换为数字类型后再选出其最大值,以及直接选出数字字段最大值
select max(convert(charNum,signed)) as maxConvertCharNum,
max(digitNum) as maxDigitNum from t2;
测试截图:

待测数据:

直接对文本和数字两种数据类型字段使用Max()函数的返回结果对比:

我们可以看到直接对文本数据类型字段使用Max函数选出的最大值是“005”而非“0010”
下面是将文本数据类型数字转换为数字数据类型后才使用Max函数的对比结果:

我们可以看到对文本类型字段使用Max函数的最大值已经跟数字数据类型字段的最大值一样了,都是10。
总结:
直接对字符型数据类型字段使用聚合函数Max()、Min()所返回的极值将遵循一般字(词)典对字(词)里设定的排序规则,所选出的最大(小)值不一定是数字意义上的极值,如果需要得出严格数字意义上的极值就必须先进行类型转换,否则得出的结果可能会与期望值有出入。
2019-03-07
可以的,返回值是5,不是005。2019-03-06
delete from student where id not in (select min(id) from student group by name)2019-03-06
mengvlog 阅读 8 次 更新于 2025-07-21 07:31:05 我来答关注问题0
  •  请叫我拉灯8c mysql001能递增吗

    能。在MySQL中如果想实现001、002、003...这样的自增效果也是非常容易的,只需要采用类似的语句即可“createtabletablename(idint(3)unsignedzerofillauto_incrementprimarykey)”,同样地可以结合前边的方法让字段能以001、003、005的递增结果展示出来。MySQL是一个关系型数据库管理系统,由瑞典MySQLAB公...

  •  倍领趣闻 mysql 怎么判断是否有该数据

    在MySQL中判断是否存在某条数据,可以使用SELECT语句配合WHERE子句。假设我们需要判断表中是否存在id为'001'的数据,可以使用以下语句:select * from 表名 where 字段名 = '该数据'(例如where id = '001')这条SQL语句会返回所有满足条件的数据行。如果存在符合条件的数据,那么查询结果中会包含相应的...

  •  云易网络科技 MySQL三大范式详解让你了解数据库设计的入门知识mysql三大范式的作用

    | 001 | Clothing | | 002 | Clothing | | 003 | Electronics | | 004 | Electronics | | 005 | Electronics | 如此拆分后,“Category”字段与“Product ID”无直接关系,符合第三范式要求。总结:三范式是MySQL中关系型数据库设计的基础。遵循三范式可以确保数据...

  • anonymous mysql 怎么将下个月到期的数据靠前排列

    下面提供一个栗子给大家尝尝:将下个月到期的保单排在前面-- 创建测试表create table if not exists 保单(保单号 varchar(10) primary key, 到期日 date);-- 清空及插入测试数据delete from 保单;insert into 保单 values('001','2016-02-01'),('002','2016-03-01'),('003','2018-09-01...

  • duHilkm mysql中的int能存储为001这样的形式吗

    int 内部存储int都是4个字节。括号内的数字是显示宽度。 不设置zerofill时,没有任何用处,设置了之后,不足位时会用0补全。

檬味博客在线解答立即免费咨询

mySQL相关话题

Copyright © 2023 WWW.MENGVLOG.COM - 檬味博客
返回顶部