Month и timestamp without time zone

Автор dbf_usr, 20 января 2017, 02:41:03

« назад - далее »

dbf_usr

Тяну данные из PostgreSQL, там поле типа "timestamp without time zone".
Нужно получить название месяцев, что бы они сортировались не по алфавиту, а по календарю. то есть просто заменить кейсом на на названия - не вариант.
Пробую так:
Month(order_client.date_order) As "Месяц",
Получаю ошибку: ErrorMsg: ERROR: function month(timestamp without time zone) does not exist;
Кто сталкивался и как исправить?
Вот пробую так (подсовываю отформатированую дату):
Month(date#(order_client.date_order, 'DD.MM.YYYY')) As "Месяц"
Но в итоге все равно ошибка (он почему то функцию принимает за название поля):
SQL##f - SqlState: 42703, ErrorCode: 7, ErrorMsg: ERROR: column "date" does not exist;
Error while executing the query

admin

#1
Вы это делаете в Select?
Используйте преобразование полей в операторе предшествующей загрузки
load date(...)..;
select from;
Все что в селекте идет через соединение к базе через драйвер, поэтому в нем пишем только понятное для конкретной СУБД.

dbf_usr

#2
Да, в SELECT делаю.
Я подключаюсь к базе и Селектами выдергиваю несколько таблиц, поля по которым они связаны представляются одинаковыми и сам Клик их связывает.
вот могу получить или номер месяца

extract(MONTH from order_client.date_order) As "Месяц",

или заменить его на название

CASE
    WHEN extract(MONTH from order_client.date_order)=1 THEN 'январь'
    WHEN extract(MONTH from order_client.date_order)=2 THEN 'февраль'
    WHEN extract(MONTH from order_client.date_order)=3 THEN 'март'
    WHEN extract(MONTH from order_client.date_order)=4 THEN 'апрель'
    WHEN extract(MONTH from order_client.date_order)=5 THEN 'май'
    WHEN extract(MONTH from order_client.date_order)=6 THEN 'июнь'
    WHEN extract(MONTH from order_client.date_order)=7 THEN 'июль'
    WHEN extract(MONTH from order_client.date_order)=8 THEN 'август'
    WHEN extract(MONTH from order_client.date_order)=9 THEN 'сентябрь'
    WHEN extract(MONTH from order_client.date_order)=10 THEN 'октябрь'
    WHEN extract(MONTH from order_client.date_order)=11 THEN 'ноябрь'
    WHEN extract(MONTH from order_client.date_order)=12 THEN 'декабрь'   
    ELSE '0'
  END AS "Месяц", 

замена на название не подходит - неправильно сортируются - графики, не верный и порядок месяцев в таблицах.

admin

Дату возьмите, и с ней уже будете работать средствами клика.

dbf_usr

Решил так сначала выгружаю в формате простой даты:
order_client.date_order::date As "Дата чека",
А потом в пост обработке делаю преобразование:
order_client:
Load *,
month("Дата чека") as Мес,
WeekDay("Дата чека") as День 
From order_client.qvd (qvd);

Может кому-то поможет.
Спасибо за подсказку о том как лучше реализовать.

Яндекс.Метрика