我有桌子:
CREATE TABLE lc (
id CHARACTER(4),
name TEXT
);
“ id”列具有包含项和子项的代码值,例如:
物品
1, 2, 3 ... 10, 11 ...
子项:
101, 102, 201, 301 ... 1001, 1002, 1101 ...
其中101是1的子项,201是2的子项,1001是10的子项,依此类推。
如何使用“排序依据”并具有以下顺序:
1
101
102
2
201
...
10
1001
1002
11
1101
...
答案 0 :(得分:1)
您可以使用此:
select *
from lc
order by case when id::int < 100 then (id::int::text || '00')::int else id::int end
但是,您的桌子确实需要重新设计。
答案 1 :(得分:1)
您的问题是有些项目是一位数字(1、2等),有些是两位(10、11等)。
您首先需要奇数位数(1或3位数字:1、2、101、102、201,...),然后是偶数位数(2或4位数字:10、11、1001、1002 ,1101,...)。在这两个集合中,您需要文本顺序:在“ 1”之后但在“ 2”之前的“ 101”。
select *
from mytable
order by length(num::text) % 2 desc, num::text;