Как использовать формат даты в postgresql?

Я использую следующий запрос:

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  ....

Какие изменения я должен сделать в моем запросе?


person Community    schedule 14.05.2015    source источник


Ответы (2)


Вы заказываете текстовое представление месяца, здесь:

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 не может создать отдельное значение для этих двух столбцов, это не изменит количество строк, но позволит вам написать это:

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);
person IMSoP    schedule 14.05.2015
comment
но мне нужен вывод в ЯНВАРЬ, ФЕВРАЛЬ... и с помощью извлечения (месяц из даты заказа) он дает 1,2,3... - person ; 14.05.2015
comment
@Shubhambatra Я не говорил менять SELECT, только ORDER BY. Тем не менее, у вас будут проблемы из-за файла DISTINCT. Я отредактирую дополнительное изменение. - person IMSoP; 14.05.2015

используя этот запрос, я получил свое решение

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
person Community    schedule 14.05.2015
comment
этот ответ может пригодиться вам в будущем - person Vivek S.; 14.05.2015