Wpis z mikrobloga

J----y 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 - J----y postgres.

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

źródło: comment_IkCU29wj1G5gLmOKypysY1wWBj8ZphNC.jpg

Pobierz
  • 11
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

@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 -
  • Odpowiedz
@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.
  • Odpowiedz
@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?
  • Odpowiedz
@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. ( ͡° ͜ʖ ͡°)
  • Odpowiedz
@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?
  • Odpowiedz