Wpis z mikrobloga

#!$%@? postgres.

Różnica pomiędzy datami 2015-06-18 a 2015-05-18 to 1 miesiąc
Różnica pomiędzy datami 2015-06-18 a 2015-05-19 to 30 dni
1 miesiąc w przeliczeniu na sekundy to 2592000
30 dni w przeliczeniu na sekundy to 2592000

#gorzkiezale #gorzkiezaleprogramisty #programowanie #bazydanych #postgresql #fucklogic #logikabazdanych
L.....F - #!$%@? postgres.

Różnica pomiędzy datami 2015-06-18 a 2015-05-18 to 1 mi...

źródło: comment_IkCU29wj1G5gLmOKypysY1wWBj8ZphNC.jpg

Pobierz
  • 11
@LOLWTF:

postgres=# select extract(epoch from ('2015-06-18'::timestamp - '2015-05-18'::timestamp));
date_part
-----------
2678400
(1 row)
postgres=# select extract(epoch from ('2015-06-18'::timestamp - '2015-05-19'::timestamp));
date_part
-----------
2592000
(1 row)
Nie ma to jak zwalać na narzędzie to, że się dat nie umie obsługiwać... Głupi młotek, głupi. ( ͡° ͜ʖ ͡°)
@alosha: Ej, to jest głupie i zupełnie nieoczywiste. Dostaję dwa różne intervale, które są takie same.

poradziłem sobie tak (docelowo potrzebowałem różnicy w dniach):

postgres=# select '2015-06-18'::date - '2015-05-18'::date;
?column?
----------
31
(1 row)
postgres=# select '2015-06-18'::date - '2015-05-19'::date;
?column?
----------
30
(1 row)
@alosha: to się nazywa "wymyślmy typ, który będzie miał pewną reprezentację, która równocześnie będzie wartością i jak ktoś tego użyje straci pół dnia, żeby się przekonać, że tego nie da się użyć zgodnie z przeznaczeniem".

Typ "różnica pomiędzy datami" powinien być faktyczną różnicą, z którą można coś zrobić. A nie sprowadzać się do stringa.
@alosha: to wytłumacz mi, jak tego typu używać. Do czego on jest? Daj mi jakiś praktyczny przykład.

W każdym innym języku programowania mogę sobie wyciągnąć z "różnicy pomiędzy datami" faktyczną różnicę.

Co mi po obiekcie, który jest równy "miesiąc różnicy", skoro to nie jest miesiąc? Dlaczego obiekt mówiący, że różnica wynosi rok, tak naprawdę trzyma informację o 360 dniach różnicy?
@LOLWTF: Proszę bardzo.
psql -Aqtc "SELECT extract( epoch from ('1 year'::interval)) = extract (epoch from ('360 days'::interval));"
f

Po prostu nadal myli Pan tekstową reprezentację interwału z rzeczywiście przechowywanym okresem. To, że nie umie Pan obsługiwać interwału nie oznacza, że jest on głupi. Ja bym to nazwał raczej PICNIC. ( ͡° ͜ʖ ͡°)
@alosha: ok, to teraz widzę swój błąd. Interval faktycznie działa, jak trzeba.

postgres=# SELECT extract(epoch from ('1 year'::interval)) = extract(epoch from ('365 days 6 hours'::interval));
?column?
----------
t
(1 row)
myli Pan tekstową reprezentację interwału z rzeczywiście przechowywanym okresem


Nie mylę. Myślałem, że to wina samego intervala, teraz rozumiem, że to wina age(), który zwraca interval, który nie ma prawdziwej wartości, tylko prawdziwą reprezentację.

Niniejszym przepraszam typ interval i całą swoją