题目描述
数据库有一列 name
数据如下
**楚乔传 第1集
楚乔传 第2集
...
楚乔传 第10集**
或者
楚乔传 02
楚乔传 02
...
楚乔传 11
如何按照大小习惯排序
题目来源及自己的思路
现在我自己做是自定义一个函数get_num_from_char
提取连续的数字
然后order by get_num_from_char(name)
前辈们有什么更好的解决方法吗
相关代码
本来是想用一个单独的字段比如sort
来自管理这个排序
但是用户是从一个媒体库导入的列表,不想手动处理
就像你说的啊,写一个过滤函数
get_num_from_char(name)
返回一个序号,然后另存到一个字段例如,一个很简单的思路就是:替换
一二三
为123
,然后留下数字0-9
就行了XXX第1集
转成1
XXXX-002集-HD
转成002
第一季第003集
,转成1003
第二季第004集
,转成2004
第三季第005集.1080P
,转成30051080
第四季第006集-1080P
,转成40061080
大结局
之类的,特殊处理下,转成数字99999999
之类的把结果保存到一个
rank
字段,以后都用这个字段做order by
排序只要保证同一个系列的,名字格式类似,就行了
吐槽一句,
sort
是动词,数据库字段,请用名词另外,有看到说直接字符串排序的……只能说想象是美好的……
实际上会变成
1、10、11……2、20、21……3、30、31……
这种