2015-07-01 3 views
0

Я прочитал в этой онлайн-документации PostgreSQL ... http://www.postgresql.org/docs/9.4/static/datatype-datetime.html#INTERVAL-STYLE-OUTPUT-TABLE в пункте 8.5.5 что-то о том, как настроить выходной интервал по умолчанию. , Я имею в виду по умолчанию интервал показывается, как это ...Как настроить интервал настроек SET (изменить выходной интервал) в PostgreSQL?

00:00:00.000 (if the timedifference is lower than a day or month or year) 

1 day 00:00:00.000 (if the timedifference reaches days, but is lower than a month or a year) 

1 month 1 day 00:00:00.000 (if the timediffence reaches months, but is lower than a year) 

1 year 1 month 1 day 00:00:00.000 (if it reaches years, months, days) 

it evens uses plurarl cases (years, mons, days) when their values are greater than one. 

Все эти изменения делают трудным любое другое приложение при выборе (запрос) этот интервал значений (в виде текста), чтобы преобразовать его в надлежащее время. Поэтому я бы хотел, чтобы postgresql всегда показывал год, месяц n дней, даже если их значение равно 0 (это может быть даже лучше, если бы он мог показать часть даты этого интервала как это ... 01.11-30, добавив нули в левая сторона, когда значения меньше десяти)

Я знаю, что могу изменить интервал на текст, используя to_char(), но я действительно хотел бы избежать этого, мне хотелось бы, чтобы какой-нибудь хороший программист postgresql сказал мне, если он верно, что есть способ настроить выходной интервал, как сказано в документации postgresql.

Спасибо Продвинутый.

PD: еще две ссылки о предмете https://my.vertica.com/docs/7.1.x/HTML/Content/Authoring/SQLReferenceManual/Statements/SET/SETDATESTYLE.htm http://my.vertica.com/docs/6.1.x/HTML/index.htm#13874.htm

+0

Я думаю, вы уже упомянули, как вы должны это делать - используйте 'to_char' или напишите (довольно простой) парсер для формата интервала. Я не думаю, что есть какой-либо поддерживаемый способ изменения выходного интервала, и вывод всегда должен быть доступен для чтения функцией интервала * input * в PostgreSQL, поэтому выражение общего формата не может быть реализовано, даже если вы этого захотите. –

+0

Почему эти ссылки (включая документацию postgresql) говорят о «Set Interval output»? Любой намек? Спасибо. – litu16

ответ

2

Вы можете установить интервал стиль вывода, но только один из нескольких предопределенных форматов, которые unambigious на входе, и что PostgreSQL знает, как для повторного анализа в интервалы. Per the documentation - это стандартный формат интервала SQL, два варианта специфического синтаксиса PostgreSQL и интервалы iso_8601.

Если вы хотите что-то знакомое и легко разобрать, рассмотреть вопрос об использовании:

SET intervalstyle = 'iso_8601' 

и использование вне-полки анализатор для интервалов ISO1601.

+0

Привет Крейг, когда я должен положить 'SET intervalstyle = 'siso_8601'' в свойствах таблицы (рядом с типом столбца интервала)? внутри функции, которая автоматически заполняет интервал столбца? что вы подразумеваете под ... _ использованием готового парсера для интервалов ISO 1601? _ Спасибо Advanced – litu16

+0

Вы этого не делаете. Это свойство сеанса. Вы можете «ALTER USER ... SET» или «ALTER DATABASE ... SET», если вы хотите сделать его постоянным для конкретного пользователя или конкретной базы данных. –

+1

Что касается второй части: не записывайте свой собственный код для чтения формата интервала ISO 1601. Используйте библиотеку. –

Смежные вопросы