Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

[PostgreSQL] Odejmowanie dat

717 views
Skip to first unread message

le...@e7.pl

unread,
Sep 3, 2002, 8:18:44 AM9/3/02
to
Witam,
W jaki sposob mozna zaimplemetowac odejmowanie dwoch dat w formacie date albo
timestamp? Moje zapytanie nie zwraca mi dokladnie to czego oczekuje (roznice w
miesiacach):

SELECT ABS(extract(MONTH FROM to_timestamp('2002-12','YYYY-MM') - to_timestamp
('2002-01','YYYY-MM'))) AS wynik;

Pozdrawiam,
Piotrek L.

--
Wysłano z serwisu OnetNiusy: http://niusy.onet.pl

hubert depesz lubaczewski

unread,
Sep 4, 2002, 1:11:54 AM9/4/02
to
le...@e7.pl wrote:
> W jaki sposob mozna zaimplemetowac odejmowanie dwoch dat w formacie date albo
> timestamp? Moje zapytanie nie zwraca mi dokladnie to czego oczekuje (roznice w
> miesiacach):
> SELECT ABS(extract(MONTH FROM to_timestamp('2002-12','YYYY-MM') - to_timestamp
> ('2002-01','YYYY-MM'))) AS wynik;

zwróć uwagę na to, że twoje zapytanie jest nielogiczne.
każesz mu najpierw policzyć *datę* w oparciu o rok i miesiąć. o.k. on ją
tworzy. odpowiednio 2002-12-01 00:00:00+01 i 2002-01-01 00:00:00+01.
świetnie. teraz odejmujesz.
wynik to 334 dni.
a teraz chcesz z tego wyciągnąć miesiąc.
jaki?
28 dniowy? 29 dniowy? 30 dniowy? 31 dniowy?
nie da się określić ile miesięcy minie w zadanej ilości dni.
jak chcesz robić takie coś to masz w zasadzie 2 opcje:
1. wynik (334 dni) podzielić przez 30, zaokrąglić i uznać za poprawny
2. napisać własną funkcję (np. plpgsql) która to policzy tak jak ty
chcesz.

depesz

--
hubert depesz lubaczewski http://www.depesz.pl/
------------------------------------------------------------------------
Mój Boże, spraw abym milczał, dopóki się nie upewnię, że naprawdę mam
coś do powiedzenia. (c) 1998 depesz

Jan Słupicki

unread,
Sep 4, 2002, 3:40:57 AM9/4/02
to
Użytkownik <le...@e7.pl> napisał w wiadomości
news:0855.000000...@newsgate.onet.pl...

> Witam,
> W jaki sposob mozna zaimplemetowac odejmowanie dwoch dat w formacie date
albo
> timestamp? Moje zapytanie nie zwraca mi dokladnie to czego oczekuje
(roznice w
> miesiacach):
>
> SELECT ABS(extract(MONTH FROM to_timestamp('2002-12','YYYY-MM') -
to_timestamp
> ('2002-01','YYYY-MM'))) AS wynik;
>

Chyba powinieneś zrobić:
SELECT ABS(
extract(MONTH FROM to_timestamp('2002-12','YYYY-MM'))
-
extract(MONTH FROM to_timestamp('2002-01','YYYY-MM'))
) AS wynik;

Albo napisać własną funkcję ...

----
Jan Słupicki

Wojtek Musiał

unread,
Sep 4, 2002, 8:42:27 AM9/4/02
to
"Jan Słupicki" <jslu...@provider.pl> napisał
news:al4dej$1qj$1...@news.onet.pl:

> Użytkownik <le...@e7.pl> napisał w wiadomości
> news:0855.000000...@newsgate.onet.pl...
>> Witam,
>> W jaki sposob mozna zaimplemetowac odejmowanie dwoch dat w formacie date
> albo
>> timestamp? Moje zapytanie nie zwraca mi dokladnie to czego oczekuje
> (roznice w
>> miesiacach):
>>

Czesc
Jesli juz to cos w tym stylu. Bedziesz mial odstęp podany w miesiacach
select
(extract(YEAR FROM '2002-12-01')*12+extract(MONTH FROM '2002-12-01'))
- (extract(YEAR FROM '2002-01-01')*12+extract(MONTH FROM '2002-01-
01'))
as wynik
Pozdrawiam

0 new messages