mysql对字符型字段中的数字进行排序

介绍了一种通过提取楼栋名称中的数字并进行排序的方法来解决字符型字段排序问题。使用MySQL自定义函数GetNum实现这一功能,但需将结果转换为整数才能正确排序。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

场景:

按楼栋名称进行排序

比如有一套楼栋数据如下:

 

直接对楼栋名称进行order by是没有效果的,因为目标字段是字符型

 

思路:

获取楼栋名称中的数字,对数字进行排序

 

解决方案:

创建mysql函数 GetNum(field)

DELIMITER $$

CREATE FUNCTION GetNum (Varstring varchar(50))
RETURNS varchar(30)
BEGIN
DECLARE v_length INT DEFAULT 0;
DECLARE v_Tmp varchar(50) default '';
set v_length=CHAR_LENGTH(Varstring);
WHILE v_length > 0 DO
IF (ASCII(mid(Varstring,v_length,1))>47 and ASCII(mid(Varstring,v_length,1))<58 )   THEN
set v_Tmp=concat(v_Tmp,mid(Varstring,v_length,1));
END IF;
SET v_length = v_length - 1;
END WHILE;
RETURN REVERSE(v_Tmp);
END$$

DELIMITER ;

调用 GetNum(field) 函数,并没有实现按数字排序

原因是因为GetNum(field)得到的结果也是字符型,所以要+0转化为int类型实现排序

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值