Pentaho CDE, дизайнер отчетов запрос justify_interval из PostgreSQL
Когда я пытаюсь выполнить этот запрос select justify_interval('2000000 second');
в postgreSQL (pgAdmin) он отлично работал, у меня был такой результат: 23 дня 03:33:20, но когда я использовал его в дизайнере отчетов Pentaho или CDE в Пентахо, у меня был такой результат: 00 лет 00 месяцев 23 дня....., мой вопрос: есть какие-либо методы, чтобы получить тот же результат, как pgAdmin в Пентахо, я не хочу, чтобы поля с 0 Скриншот из PEntaho Report Designer
1 ответ
Вы можете преобразовать свое значение в строку в запросе SQL:
Вы можете просто привести свое значение к тексту или varchar в SQL:
select justify_interval('2000000 second')::text as justify_interval;
или же
select cast(justify_interval('2000000 second') AS text) as justify_interval
Выход:
23 days 03:33:20
Если вы хотите иметь больший контроль над результирующим значением, вы можете извлечь различные части интервала, используя
date_part()
или жеextract()
Функции SQL. Затем вы сможете отформатировать эти части по мере необходимости и добавить текст на требуемом языке:-- common table expression just to avoid writing justify_interval('2000000 second') -- in every date_part entry: WITH interval_cte(interval_column) AS ( VALUES(justify_interval('2000000 second')) ) SELECT -- trim to remove trailing space, if seconds are null -- nullif(*, 0) will make it null if the date part is 0 -- in this case the subsequent concatenation with ' *(s)' will result in null too -- finally(*,''), coalesce will replace null with empty string, so that -- subsequent concatenations will not dissappear: COALESCE(NULLIF(date_part('year', interval_column), 0) || ' year(s) ', '') || COALESCE(NULLIF(date_part('month', interval_column), 0) || ' month(s) ', '') || COALESCE(NULLIF(date_part('day', interval_column), 0) || ' day(s) ', '') -- FM prefix will suppress leading whitespace, -- 00 will output leading zeros if number has less then two digits || to_char(date_part('hour', interval_column), 'FM00') || ':' || to_char(date_part('minute', interval_column), 'FM00') || ':' || to_char(date_part('second', interval_column), 'FM00') AS justofy_interval FROM interval_cte
Выход: 23 day(s) 03:33:20