Опция индикатора даты / времени военного меридиана - PullRequest
5 голосов
/ 01 июля 2011

Запуск PostgreSQL 7.4 (Да, мы обновляем)

Поле типа данных: timestamp with time zone

Формат такой: 2011-06-30 19:18:07-04

Преобразование в этот формат:

to_char(datetime_field, 'MM-DD-YYYY HH12:MI:SS') AS "New Date"

Вывод такой:

06-30-2011 07:18:07

Но мне также нужно добавить индикатор меридиана.

Желаемые результаты:

// if AM
06-30-2011 07:18:07 AM

// if PM
06-30-2011 07:18:07 PM

Есть ли вариант, который я могу пропустить, чтобы получить это?

В качестве примера приведем дату и время

2011-06-30 19:18:07-04

должно быть так:

06-30-2011 07:18:07 PM

UPDATE:

Ну, я все еще ищу вариант, чтобы пройти, но это обходной путь, который я сделал:

CASE WHEN date_part('HOUR', datetime_field) > 12
     THEN to_char(datetime_field, 'MM-DD-YYYY HH12:MI:SS PM')
     ELSE to_char(datetime_field, 'MM-DD-YYYY HH12:MI:SS AM')
END AS "New Date"

Ответы [ 2 ]

7 голосов
/ 02 июля 2011

Согласно странице документации (для v8.2) , вы можете использовать любой шаблон из этого списка: AM, am, PM, pm, A.M., a.m., P.M., p.m.. Выбранный паттерн будет определять стиль индикатора на выходе, но будет ли он ante meridiem или post meridiem , будет полностью зависеть от значения временной метки.

Так что вам вообще не нужно использовать CASE. Используйте любое из двух:

  • to_char(datetime_field, 'MM-DD-YYYY HH12:MI:SS AM') AS "New Date"

  • to_char(datetime_field, 'MM-DD-YYYY HH12:MI:SS PM') AS "New Date"

Это то, о чем вы спрашивали?

1 голос
/ 01 июля 2011

to_char (поле datetime_, 'DD-MM-YYYY HH12: MI: SS PM')

работает в последней версии, я не уверен в 7.4

http://www.postgresql.org/docs/9.0/interactive/functions-formatting.html

'ДД-ММ-ГГГГ ЧЧ12: МИ: СС' - 30-30-2011 07:18:07

ДД-ММ или ММ-ДД?

...