2012-06-27 21 views

回答

1

您可以使用格式化的列不同的別名:

SELECT to_char(foo,'dd/MM/yyyy') as formatted_foo, 
     bar 
FROM baz 
ORDER BY foo; 

作爲一種選擇,如果你需要保持foo的別名:

select foo, 
     bar 
from (
    SELECT to_char(foo,'dd/MM/yyyy') as foo, 
     foo as foo_date 
     bar 
    FROM baz 
) t 
order by foo_date 
+0

謝謝,即使有一種方法可以保留原始列名稱。 –

-1

的替代方法不拉富兩次會:

SELECT 
    to_char(foo,'dd/MM/yyyy') AS foo -- Alias precedes original column name 
    ,bar 
FROM 
    baz 
ORDER BY 
    CAST(foo AS DATE) -- Explicit cast ensures date order instead of text 
; 

原生PostgreSQL版本會是:

SELECT 
    to_char(foo,'dd/MM/yyyy') AS foo -- Alias precedes original column name 
    ,bar 
FROM 
    baz 
ORDER BY 
    foo::DATE -- Explicit cast ensures date order instead of text 
; 
+1

這只是不必要的併發症,沒有任何好處。 – kgrittn

1

有什麼不對

SELECT foo AS foo_date, to_char(foo,'dd/MM/yyyy') AS foo, bar 
FROM baz 
ORDER BY foo_date; 
4

正確的和簡單的解決方案是:

SELECT to_char(b.foo,'dd/MM/yyyy') as foo, b.bar 
FROM baz b 
ORDER BY b.foo; 

格式化的日期列foo是查詢規劃一個全新的專欄,碰巧與表格列foo衝突。在ORDER BY和GROUP BY子句中,輸出列的名稱優先於表列。不合格的名稱foo將引用輸出列。

要使用ORDER BY子句中的原始表格列,只需要表格即可驗證列

我對錶格進行了表格限定,以闡明我的觀點。在這種情況下,只會在ORDER BY子句中需要。表別名b只是爲了方便。