2013-06-20 66 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 
相關問題