2013-06-20 67 views
3

我想排序在Postgres数据库字符列:我如何使用特定字符对postgres列进行排序?

Select column1 from table order by column1 

输出

dir1 
dir2 
dir3 
#num1 
t1 

我想要的那种打印#num1第一sqlite的方式一样。任何想法我需要改变我的查询?

+1

排序规则的问题? [postgres整理](http://www.postgresql.org/docs/9.1/static/collat​​ion.html) – Glenn

回答

4

一个可能的解决方案是“禁用”您整理设置这种:

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

1

蛮力版本把#在上面的排序顺序

SELECT column1 
    FROM table1 
ORDER BY CASE WHEN LEFT(column1, 1) = '#' 
       THEN 0 ELSE 1 END, column1 

这里是SQLFiddle演示。

这可能不是正是你想要

0

您可以使用命令字段的ASCII值是什么:

SELECT column1 FROM table ORDER BY ascii(column1) 

特殊字符的ASCII值是字母的人低。

输出

#num1 
dir1 
dir2 
dir3 
t1 
相关问题