Как отформатировать столбец даты Vertica только в месяц?

Я пытаюсь отформатировать столбец даты Vertica только в месяц.

Мне нужно конечное значение в каком-то типе данных даты, чтобы в отчете я мог упорядочить результаты по дате/времени, а не по тексту. Так что февраль сортируется после января и т.д.

select TO_DATE(TO_CHAR(purchase_date), 'Month')  
from transactions
order by 1;

Я также пробовал:

select TO_DATE(TO_CHAR(MONTH(purchase_date)), 'Month')  
from transactions
order by 1;

Приведенные выше операторы вызывают ошибку «Недопустимое значение для месяца».

Любые идеи?


person davidjhp    schedule 05.02.2014    source источник
comment
Можете ли вы привести примеры результатов, которые вы пытаетесь получить?   -  person Gordon Linoff    schedule 06.02.2014
comment
Почему вы пытаетесь преобразовать один месяц обратно в дату? Это не имеет смысла. Другим вариантом может быть extract(month from purchase_date), который является ANSI SQL, но я не знаю, поддерживает ли его Vertica.   -  person a_horse_with_no_name    schedule 06.02.2014
comment
@Gordon Linoff‹br› Январь – 10 распродаж‹br› Февраль – 20 распродаж‹br›   -  person davidjhp    schedule 06.02.2014
comment
@a_horse_with_no_name, поэтому строки сортируются в порядке месяц/дата   -  person davidjhp    schedule 06.02.2014
comment
В общем, по вопросам форматирования Vertica поступает так же, как и PostgreSQL. Поэтому, если вы не можете найти ответ для Vertica, поищите в Интернете, как это делается в PostgreSQL, и, скорее всего, это будет правильный ответ.   -  person geoffrobinson    schedule 06.02.2014


Ответы (3)


Как насчет этого?

select to_char(purchase_date, 'Month')
from transactions
order by purchase_date;

Вы можете упорядочить по столбцам, которых нет в списке select.

РЕДАКТИРОВАТЬ:

Если вы хотите объединить месяцы из нескольких лет, вышеописанное не сработает. Это будет:

select to_char(purchase_date, 'Month')
from transactions
order by extract(month from purchase_date);
person Gordon Linoff    schedule 05.02.2014
comment
Это не я проголосовал за это, я не знаю, кто это сделал. - person davidjhp; 06.02.2014
comment
@davidjhp . . . Это был не мой вопрос. Этот подход работает для вас? - person Gordon Linoff; 06.02.2014
comment
to_char не будет работать, так как с тех пор он не будет сортироваться по дате, так что февраль сортируется после января и т. д. - person davidjhp; 06.02.2014
comment
@davidjhp . . . Это не сортировка по результатам to_char(), это сортировка по исходной дате. - person Gordon Linoff; 06.02.2014
comment
Фактический запрос представляет собой большую группу по оператору, я сильно упростил его для SO, но реальный запрос больше. ПС спасибо за старание. - person davidjhp; 06.02.2014
comment
@davidjhp . . . Я так и подозревал. В этом случае используйте order by max(purchase_date). Вы можете поместить название месяца в select, и тогда все будет в правильном порядке. - person Gordon Linoff; 06.02.2014

Select TO_CHAR((NOW() - INTERVALYM '1 MONTH'), 'MON');

Выход:

JUN

Это поможет вам получить только название предыдущего месяца.

person Manoj Kumar    schedule 20.07.2016

Мы можем напрямую использовать date_part, чтобы получить месяц из метки времени.

SELECT DATE_PART('MONTH', purchase_date) purchase_date

TO_DATE дает полную дату, если вы укажете только MM в параметре, тогда Vertica установит год и день по умолчанию.

Предположим, что номер месяца равен 8.

SELECT TO_DATE(purchase_date, 'MM')

Вывод: (0001-08-01)

person Bipul singh kashyap    schedule 26.05.2020