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

https://blog.csdn.net/github_39325328/article/details/79746103


场景:

按楼栋名称进行排序

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


直接对楼栋名称进行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类型实现排序


————————————————

版权声明:本文为CSDN博主「github_39325328」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。

原文链接:https://blog.csdn.net/github_39325328/article/details/79746103

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • SQL语句需要先编译然后执行,而存储过程(Stored Procedure)是一组为了完成特定功能的SQL语句集,...
    MIN_ZJM阅读 3,841评论 0 1
  • 手动不易,转发请注明出处 --Trance 数据库系统命令: (1).查看存储过程状态:show pro...
    Trance_b54c阅读 5,675评论 0 8
  • ORA-00001: 违反唯一约束条件 (.) 错误说明:当在唯一索引所对应的列上键入重复值时,会触发此异常。 O...
    我想起个好名字阅读 10,788评论 0 9
  • 转载自这里 存储过程简介 我们常用的操作数据库语言SQL语句在执行的时候需要要先编译,然后执行,而存储过程(Sto...
    杜七阅读 6,976评论 4 27
  • 原文:http://www.runoob.com/w3cnote/mysql-stored-procedure.h...
    忘了呼吸的那只猫阅读 4,734评论 0 1