SQL排序,字段值里面既有数字,也有字母,还有数字字母组合,例如 A-1-1,A-1-11,A-1-2
要实现 A-1-1,A-1-2,A-1-11这样的排序,如何解决,直接排序都是 A-1-1,A-1-11,A-1-2这样子的排法。
反正就是字母的按照字母排,数字的按照数字来排
自己写个 PARSE(SQL 2012 的系统函数里有) 函数。
SELECT PARSE('A-1-1') AS F1 FROM T ORDER BY F1
PARSE的转换,可以根据你的需求设置为列的一种:
1, 把 'A-1-1'形式转换为 'A-01-01',把数字按等宽补齐 0 ,补齐多少位,视你的实际需求设置。
直接order by 列名 就可以的,
字符串的排序,是先比较第一位,然后第二位,然后第三位的......
这个不行的会变成A-1-1,A-1-11,A-1-2这种排法的
@腐乳: 你的字符格式都是一样的么 X-X-X 这个格式.?
如果是这样的话,你可以先截取三个X位置的数据出来,然后再转换成数据,然后再排序试试.
@发粪图墙: 不一样
有可能都是字母,有可能都是数字,还有混合,有可能是X,有可能是X-X,很变态
@腐乳: 我给你一些数据参考吧,W52-15-9,WFS-a-b,wq1-1,wq1-2,wq2,wq2-9-9,VW2-A-2,s00-1-1
@腐乳: 那你的后两个都是数字.?是否只用后面两个做排序就可以了呢.?
还是说前面的也要做排序呢.?
@发粪图墙: 不一定是数字的,都要排序,反正就是字母的按照字母排,数字的按照数字来排
@腐乳: 那字母加数字的怎么处理呢.?像wq2-9-9,VW2-A-2两个哪个在前哪个在后呢.?
@发粪图墙: 每个字符串如果都是数字,先按数字来,有字母,按字母先,再按数字
这个的话VW2-A-2, wq2-9-9
@腐乳: 先按-切分成三列,然后再把三列先按字符长度排列,然后再按大小排列,
order by len(col1),len(col2),len(col3),col1,col2,col3
首先要先确定你的数据格式!你的样例数据太少,无法知道你所有的数据格式。
如果都是字母-数字-数字,可以新存储为3个字段,然后用order by排序;
是不是有规律的字符串 ? 是,试试:
A-1-1 =>A-1-01
A-1-2 =>A-1-02
A-1-11 =>A-1-11
再排序
照上面学下,入门是没有问题的了。以后的路就得靠你自己了。