如何在postgresql中使用日期格式?

时间:2015-05-14 10:17:45

标签: postgresql postgresql-9.2

我使用以下查询:

SELECT distinct to_char(order_date, 'Mon') as mon from meta.ship_error order 
by to_char(order_date, 'Mon') asc 

,输出为:

 "Apr" 
 "Aug" 
 "Dec" 
 "Feb" 
 "Jan" 
 "Jun" 
 "Mar" 
 "May" 
 "Nov" 
 "Oct" 
 "Sep" 
  ""

但我希望输出如下:

 jan
 feb
 mar
 apr  ....

我应该做什么更改在我的查询中?

2 个答案:

答案 0 :(得分:3)

您按月份的文字表示排序,此处:

order by to_char(order_date, 'Mon') asc 

to_char的结果是一个字符串,所以排序是按字母顺序排列的; Postgres不再知道这与日期有任何关系,所以没有理由把" jan"之前" apr"。

您想要按日期本身订购:

order by order_date asc

或通过月份的数字表示形式,您可以使用extract()

order by extract(month from order_date) asc

请注意,由于您的DISTINCT目前正在根据文字表示进行分组,因此您可能无法使SELECTORDER BY使用不同的表示形式。使用明确的GROUP BY可以更容易,这可以列出两种表示形式:

group by extract(month from order_date), to_char(order_date, 'Mon')

由于您可以确定给定的order_date无法为这两列生成单独的值,因此不会更改行数,但允许您编写以下内容:< / p>

select to_char(order_date, 'Mon')
from meta.ship_error
group by extract(month from order_date), to_char(order_date, 'Mon')
order by extract(month from order_date);

答案 1 :(得分:0)

使用此查询我得到了我的解决方案

SELECT distinct to_char(order_date, 'Mon') as MON , extract(month from 

order_date) from meta.ship_error order by extract(month from order_date) asc