mysql字符串按数字排序,mysql字符串百分比排序
发布时间:2025-06-24 16:41:50 作者:北方职教升学中心 阅读量:729
文章目录。
- 一、前言。
- 二、mysql字符串按数字排序。
- 三、mysql字符串百分比排序。
- 四、从字符串中提取数字并排序。
一、前言。
在实际项目中,数字、百分比等数据存储在数据库中可能会遇到。如果直接用varchar排序,可能不是我们想要的效果,以下是如何根据数字对字字符串进行排序。
Mysql提供两种类型的转换函数,可将字符串转换为执行类型(例如数字类型)。有关内容,请参阅Mysql convert函数, Mysql cast函数。
示例数据
CREATE。TABLE。`test。`(。`id。`int。NOT。NULL。PRIMARY。KEY。AUTO_INCREMENT。comment。'主键id',`number。`varchar。(。10。)。DEFAULT。NULL。COMMENT。'数字',`percent。`varchar。(。10。)。DEFAULT。NULL。COMMENT。'百分比')。ENGINE。=InnoDB。AUTO_INCREMENT。=1。;insert。into。test。(。`number。`,percent。)。values。(。'89.01','89.01%')。,(。'89.10','89.10%')。,(。'100.01','100.01%')。;select。*。from。test。 order。by。`number。`desc。;
可以发现数字最大的排在最下面。
二、mysql字符串按数字排序。
对上述示例中的number字段进行排序。
# 方法1:将number字段转换为float类型。 8.00mysql版本需要mysql版本.17及以上。select。*。from。test。 order。by。cast。(。number。 as。float。)。desc。select。*。from。test。 order。by。convert。(。number。,float。)。desc。# 方法二:将number字段转换为double类型。 8.00mysql版本需要mysql版本.17及以上。select。*。from。test。 order。by。cast。(。number。 as。double。)。desc。select。*。from。test。 order。by。convert。(。number。,double。)。desc。# 方法3:将number字段转换为decimal类型。select。*。from。test。 order。by。cast。(。number。 as。decimal。(。10。,2。)。)。desc。select。*。from。test。 order。by。convert。(。number。,decimal。(。10。,2。)。)。desc。
排序结果如下::
如果字段中有整数无小数点,也可以用以下方法进行排序。
# 将number字段转换为整数类型。select。*。from。test。 order。by。cast。(。number。 as。SIGNED。)。desc。select。*。from。test。 order。by。convert。(。number。,SIGNED。)。desc。
三、mysql字符串百分比排序。
对上述示例中的percent字段进行排序。
# 方法1:将number字段转换为decimal类型。-- 测试后发现转换为decimal时,默认会去除%#xfff00不受影响c;如有影响,可使用以下方法,先把%去掉。select。*。from。test。 order。by。cast。(。percent。as。decimal。(。10。,2。)。)。desc。select。*。from。test。 order。by。convert。(。percent。,decimal。(。10。,2。)。)。desc。# 方法二:首先手动替换多余的字符。select。*。from。test。 order。by。cast。(。REPLACE。(。percent。,'%','')。as。decimal。(。10。,2。)。)。desc。select。*。from。test。 order。by。convert。(。REPLACE。(。percent。,'%','')。,decimal。(。10。,2。)。)。desc。
在上面的sql中:
REPLACE(percent, '%', '')。
:移除字符串中的百分比。CAST(... AS DECIMAL(10,2))。
将结果转换为DECIMAL类型,10.总位数(包括小数点),二是小数位数。这些值可以根据需要进行调整。
四、从字符串中提取数字并排序。
1.以下是根据文件名中的数字进行排序。
让我们先看几个 file_name示例值:
- 中文_1.mp4。
- 中文_12.mp4。
- 中文_2.mp4。
- 中文_10.mp4。
按照file_name的默认排序如下a;
数据准备。
CREATE。TABLE。`test1。`(。`id。`int。NOT。NULL。PRIMARY。KEY。AUTO_INCREMENT。comment。'主键id',`file_name。`varchar。(。10。)。DEFAULT。NULL。COMMENT。'文件名')。ENGINE。=InnoDB。AUTO_INCREMENT。=1。;insert。into。test1。(。file_name。)。values。(。'中文_1.txt')。,(。'中文_2.txt')。,(。'中文_10.txt')。,(。'中文_12.txt')。;
使用 REGEXP_SUBSTR 提取和排序函数。
MySQL 在8.0及以上版本中我们能用 REGEXP_SUBSTR() 函数提取字符串中的数字部分。这个函数允许我们使用正则表达式来指定我们想要匹配的模式。在这个例子中,我们使用正则表达式 \d+ 匹配一个或多个数字。
以下是完整的SQL查询,用于按数字排序:
SELECT。*。FROM。test1。WHERE。file_name。 LIKE。'%中文%'ORDER。BY。CAST。(。REGEXP_SUBSTR。(。file_name。 ,'\\d+')。AS。UNSIGNED。)。;
SQL语句做了以下几件事:
WHERE original_name LIKE '%中文%'
:筛选所有包含“中文”记录的文件名。REGEXP_SUBSTR(original_name, '\\d+')。
:从 original_name 第一组连续数字中提取。CAST(... AS UNSIGNED)。
:将提取的字符串转换为无符号整数,按数字排序。
排序结果如下::