我想排序在Postgres数据库字符列:我如何使用特定字符对postgres列进行排序?
Select column1 from table order by column1
输出
dir1
dir2
dir3
#num1
t1
我想要的那种打印#num1
第一sqlite的方式一样。任何想法我需要改变我的查询?
我想排序在Postgres数据库字符列:我如何使用特定字符对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 for individual expressions需要的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
排序规则的问题? [postgres整理](http://www.postgresql.org/docs/9.1/static/collation.html) – Glenn