在MySQL中,如果需要对某个字符串类型的字段按字符串中的数字进行排序,可以考虑如下自定义函数:

CREATE FUNCTION GetNum (Varstring varchar(50)) RETURNS varchar(30)
DETERMINISTIC
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;

该函数来源:Mysql中实现提取字符串中的数字的自定义函数分享_Mysql

在我所使用的MySQL数据库,如果没有在

CREATE FUNCTION GetNum (Varstring varchar(50)) RETURNS varchar(30)

后边加上

DETERMINISTIC

则会提示错误:

[Err] 1418 - This function has none of DETERMINISTIC, NO SQL, or READS SQL DATA in its declaration and binary logging is enabled (you *might* want to use the less safe log_bin_trust_function_creators variable)

原因及具体解决方案如下:
MySQL This function has none of DETERMINISTIC, NO SQL…错误1418 的原因分析及解决方法

则在查询的时候即可使用该函数:

SELECT * from table_name ORDER BY CAST(GetNum(attribute_name) AS UNSIGNED);

cast函数是将提取出来的数字字符串转换为特定类型比如unsigned,原型如下:

CAST(expr AS type)

expr即为要转换的表达式,type即要转成的类型,我这里要转为整数,所以设为unsigned。
具体用法可查看:MYSQL中,CAST函数的使用规则