我想按字母数字列对搜索结果进行排序,以便首先显示带字母的行,最后显示带有数字字符的行。
当前结果
12
13
14
aa
ab
bb
bd
预期结果
aa
ab
bb
bd
11
12
13
答案 0 :(得分:1)
您可以检查字符串是否区分大小写:
with a_table(col) as (
values
('12'), ('13'), ('14'), ('aa'), ('ab'), ('bb'), ('bd')
)
select *
from a_table
order by lower(col) = upper(col), col;
col
-----
aa
ab
bb
bd
12
13
14
(7 rows)
答案 1 :(得分:0)
SELECT ... FROM table order by CASE WHEN column < 'A' THEN lpad(column, size, '0') ELSE column END;
希望这会奏效。
答案 2 :(得分:0)
... ORDER BY (mycol SIMILAR TO '[0-9]*'), mycol
答案 3 :(得分:0)
您想要使用
对字符应用特定的排序顺序您可以通过重新排列字符串中的字符来实现此目的,例如: 'a' - &gt; '01',b - &gt; '02','0' - &gt; '90','1' - &gt; '91','abc123' - &gt; '010203919293'。你可以为此编写一个函数,然后从你的查询中调用。
select col
from mytable
order by get_sortkey(col);
一个简单的替代方案可能是使用TRANSLATE
函数。缺点:它仅用另一个单个字符替换每个字符,而不是如上例中的两个或更多个字符。知道我们可以使用的ASCII码:
select col
from mytable
order by translate(col,
'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789',
'0123456789ABCDEFGHIJKLMNOP0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ'
) collate "C";