我使用以下查询:
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 ....
我应该做什么更改在我的查询中?
答案 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
目前正在根据文字表示进行分组,因此您可能无法使SELECT
和ORDER 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