我正在尝试对 Postgres 数据库中的字符列进行排序:
Select column1 from table order by column1
输出
dir1
dir2
dir3
#num1
t1
我希望排序#num1
首先以 sqlite 的方式打印。有什么想法我需要在查询中更改吗?
我正在尝试对 Postgres 数据库中的字符列进行排序:
Select column1 from table order by column1
输出
dir1
dir2
dir3
#num1
t1
我希望排序#num1
首先以 sqlite 的方式打印。有什么想法我需要在查询中更改吗?
一种可能的解决方案是“禁用”这种排序规则设置:
WITH x(a) AS (VALUES
('dir1')
,('dir2')
,('dir3')
,('#num1')
,('t1')
)
SELECT *
FROM x
ORDER BY a COLLATE "C";
单个表达式的 Ad-hoc Collation需要 PostgreSQL 9.1 或更高版本。
大多数语言环境会忽略排序的前导#
。如果切换到"C"
,字符将按其字节值有效排序。不过,这可能是也可能不是您想要的。
许多相关问题,例如这里:
PostgreSQL UTF-8 binary collation
#
按排序顺序放在首位的蛮力版本
SELECT column1
FROM table1
ORDER BY CASE WHEN LEFT(column1, 1) = '#'
THEN 0 ELSE 1 END, column1
这是SQLFiddle演示。
这可能不是您想要的
您可以使用有序字段的 ASCII 值:
SELECT column1 FROM table ORDER BY ascii(column1)
特殊字符 ASCII 值低于字母值。
输出
#num1
dir1
dir2
dir3
t1