Вы заказываете текстовое представление месяца здесь:
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);
, но мне нужен выход в январе, февраль ... и с использованием экстракта (месяц е rom order_date) он дает 1, 2, 3 ... –
@Shubhambatra Я не сказал, чтобы изменить «SELECT», только «ORDER BY». Тем не менее, у вас будут проблемы из-за 'DISTINCT'. Я отредактирую дополнительные изменения. – IMSoP