Гость
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Как сделать такой запрос с датами? / 7 сообщений из 7, страница 1 из 1
27.08.2017, 12:56
    #39511154
Ролг Хупин
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как сделать такой запрос с датами?
В SQL Server есть такой запрос

Код: sql
1.
2.
3.
select 
    DATEADD(year,-ISNULL(yearest,0),
    DATEADD(MONTH, -ISNULL(monthest,0), modified_established)) dateestablished from clients



Как корректно сделать такой же в PostgreSQL?
...
Рейтинг: 0 / 0
27.08.2017, 21:35
    #39511306
vyegorov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как сделать такой запрос с датами?
Ролг Хупин,

Чтоб ещё знать что этот запрос делает?..

Работу с датой и временем в SQL Server-е так и не осилил…
...
Рейтинг: 0 / 0
27.08.2017, 21:49
    #39511312
Ролг Хупин
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как сделать такой запрос с датами?
vyegorovРолг Хупин,

Чтоб ещё знать что этот запрос делает?..

Работу с датой и временем в SQL Server-е так и не осилил…

о, спасибо!
...
Рейтинг: 0 / 0
27.08.2017, 23:25
    #39511328
vyegorov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как сделать такой запрос с датами?
Ролг Хупин,

Проще всего интервалами воспользоваться:
Код: sql
1.
2.
SELECT now() + INTERVAL '0 years 2 months';
SELECT now() + (coalesce(0, 0)||'years '||coalesce(2, 0)||' months')::interval;
...
Рейтинг: 0 / 0
28.08.2017, 12:57
    #39511555
p2.
p2.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как сделать такой запрос с датами?
vyegorovПроще всего интервалами воспользоваться:
Код: sql
1.
2.
SELECT now() + INTERVAL '0 years 2 months';
SELECT now() + (coalesce(0, 0)||'years '||coalesce(2, 0)||' months')::interval;

Стоит только убедиться, что недоаддитивность арифметики интервалов YM совпадает с недоаддитивностью mssqlного dateadd.
Код: sql
1.
2.
3.
4.
5.
db=> select d+i1+i2 d1, d+i2+i1 d2
db-> from (select date '2017-01-31' d, interval '1' month i1, interval '2' month i2) t;
         d1          |         d2
---------------------+---------------------
 2017-04-28 00:00:00 | 2017-04-30 00:00:00
...
Рейтинг: 0 / 0
28.08.2017, 13:41
    #39511606
Ролг Хупин
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как сделать такой запрос с датами?
vyegorovРолг Хупин,

Чтоб ещё знать что этот запрос делает?..

Работу с датой и временем в SQL Server-е так и не осилил…

Мой пробой, не описал:

есть два поля, yearest, monthest - сколько лет и месяцев назад (!) было основано что-то там, и поле modified_established - которое было заполнено датой создания или изменения записи.
Выборка пытается выдать дату основания того чего-то в виде даты.
Я так понял одни е**наты надизайнировали такие поля, другие на кололтили в них данных типа "сейчас на сейчас", т.е. сегодня 10 марта 2010 года, значит фирма была основана 5 лет и 3 месяца назад(!), ну, хоть modified_established заполнилась как 2010-03-10, можно что-то отсчитать в зад .
...
Рейтинг: 0 / 0
28.08.2017, 14:42
    #39511673
LeXa NalBat
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как сделать такой запрос с датами?
Код: sql
1.
2.
with const(modified_established, yearest, monthest) as (select '2010-03-10'::date, 5, 3)
select modified_established - make_interval(years=>yearest, months=>monthest) from const;
...
Рейтинг: 0 / 0
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Как сделать такой запрос с датами? / 7 сообщений из 7, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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