2015-05-14 2 views
1

Я использую следующий запрос:Как использовать формат даты в 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 .... 

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

ответ

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

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); 
+0

, но мне нужен выход в январе, февраль ... и с использованием экстракта (месяц е rom order_date) он дает 1, 2, 3 ... –

+1

@Shubhambatra Я не сказал, чтобы изменить «SELECT», только «ORDER BY». Тем не менее, у вас будут проблемы из-за 'DISTINCT'. Я отредактирую дополнительные изменения. – IMSoP

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 
+0

этот [ответ] (http://stackoverflow.com/a/29839100/3682599) может быть полезен для вас в будущем –

Смежные вопросы