Гость
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / как изменить поведение по умолчанию daterange / 10 сообщений из 10, страница 1 из 1
05.02.2019, 11:47
    #39769568
graywolf_too
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как изменить поведение по умолчанию daterange
Всем добрый день!

Делаю запрос
select daterange('2019-02-05','2019-02-05','[]')

в соответствии с документацией должен вернуть [2019-02-05,2019-02-05]
возвращает [2019-02-05,2019-02-06)

подскажите каким способом можно получить интервал [2019-02-05,2019-02-05] ?
мне это важно, потому что во всем приложении верняя граница определяется через upper(интервал), а переписывать кучу кода на анализ включения границы практически нереально
...
Рейтинг: 0 / 0
05.02.2019, 12:01
    #39769577
qwwq
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как изменить поведение по умолчанию daterange
кхмм
Код: sql
1.
2.
select daterange('2019-02-05','2019-02-05','[]') = daterange'[2019-02-05,2019-02-05]'
,daterange'[2019-02-05,2019-02-06)' = daterange'[2019-02-05,2019-02-05]'
...
Рейтинг: 0 / 0
05.02.2019, 12:12
    #39769584
qwwq
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как изменить поведение по умолчанию daterange
дажы вот так:
Код: sql
1.
2.
3.
4.
5.
select daterange('2019-02-05','2019-02-05','[]') = daterange'[2019-02-05,2019-02-05]'
,daterange'[2019-02-05,2019-02-06)' = daterange'[2019-02-05,2019-02-05]'
,upper(daterange'[2019-02-05,2019-02-06)') = upper(daterange'[2019-02-05,2019-02-05]')
,upper(daterange'[2019-02-05,2019-02-06)'), upper(daterange'[2019-02-05,2019-02-05]')
,upper(daterange'[2019-02-05,2019-02-05]') -1 as mudupper -- create new function, Luke 
...
Рейтинг: 0 / 0
05.02.2019, 12:57
    #39769612
graywolf_too
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как изменить поведение по умолчанию daterange
именно в этом и вопрос

согласно документации select upper(daterange'[2019-02-05,2019-02-05]') должен возвратить верхнюю границу, т.е. 5 февраля
а реально возвращает 6-е февраля, что неверно

я к тому, что функция upper при таком поведении работает не логично

в доке написано, что такое поведение является по умолчанию базовым, вопрос был в том - можно ли изменить такое поведение, чтобы движок PG не изменял верхнюю границу интервала и вхождение как ему захочется, а оставлял так как нужно разработчику?
...
Рейтинг: 0 / 0
05.02.2019, 12:59
    #39769613
graywolf_too
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как изменить поведение по умолчанию daterange
может быть можно создать свой тип, производный от daterange и там как то указать нужное поведение?
...
Рейтинг: 0 / 0
05.02.2019, 13:22
    #39769631
qwwq
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как изменить поведение по умолчанию daterange
graywolf_too,

напротив всё логично
для квантуемых значений иметь несколько типов рассечений (сечений с верхней или нижней гранью) -- избыточно.
и соответственно задача покрываема одним типом полуоткрытого интервала. что и реализовано.


для [условно]непрерывных -- 2 вида сечений -- неустранимая данность . и её надо описывать. т.е. типов интервалов становится немного больше. т.к. там полуоткрытый не описать закрытым со сдвигом на квант.


напишите ф-ю маппер, и сделайте массовую замену. или перекройте встроенный аппер своим в путях поиска имен.
...
Рейтинг: 0 / 0
05.02.2019, 13:24
    #39769632
Melkij
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как изменить поведение по умолчанию daterange
graywolf_too,

поведение как раз по документации. Только у вас разный upper_inc()

Создать свой тип можно, это postgresql. Любые развлечения с типами на вашу голову.
За это преобразование отвечает canonical функция .
...
Рейтинг: 0 / 0
05.02.2019, 15:53
    #39769723
graywolf_too
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как изменить поведение по умолчанию daterange
qwwqgraywolf_too,

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

нельзя немного подробнее, как перекрыть встроенный своим - ссылку какую-нибудь в каком разделе доки это почитать можно
...
Рейтинг: 0 / 0
05.02.2019, 16:31
    #39769747
qwwq
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как изменить поведение по умолчанию daterange
graywolf_too,
RTFM "search_path "

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
show search_path;
-->""$user", public"

select upper(daterange'[2019-02-05,2019-02-06)') , upper(daterange'[2019-02-05,2019-02-05]');
-->"2019-02-06";"2019-02-06"
create or replace function public.upper(daterange) returns date as $$select pg_catalog.upper($1)-1$$language sql immutable ;
-->create
select upper(daterange'[2019-02-05,2019-02-06)') , upper(daterange'[2019-02-05,2019-02-05]');
-->"2019-02-05";"2019-02-05"
drop function public.upper(daterange);
-->drop
select upper(daterange'[2019-02-05,2019-02-06)') , upper(daterange'[2019-02-05,2019-02-05]');
-->"2019-02-06";"2019-02-06"




но вам ведь надо наверное оба кейса -- открытый и закрытый верхний конец интервала -- т.ч. рисуйте свой интервал, рукопашный. текущий датарендж вам не подойдет.вот если его дополнить признаками инклюзивности концов . т.е. сделать композит.
...
Рейтинг: 0 / 0
05.02.2019, 16:49
    #39769757
graywolf_too
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как изменить поведение по умолчанию daterange
qwwq,
большое спасибо, принцип понятен, а там под себя доделаю
...
Рейтинг: 0 / 0
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / как изменить поведение по умолчанию daterange / 10 сообщений из 10, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]