Rozdział 2

Typy danych

2.1  Napisy

2.1.1  Wbudowane operacje na napisach

Najczęściej używane operacje to:

Przypuśćmy, że w kolumnie student mamy zapisaną informację w postaci 'nazwisko imię', a chcemy odwrócić tę kolejność na postać 'imię nazwisko':

  substr(student, position(' ' IN student) + 1)
  || ' '
  || substr(student, 1, position(' ' IN student))

2.2  Daty i czas

W Postgresie daty i czas są obsługiwane zgodnie ze standardem SQL2. Cztery podstawowe wbudowane typy to DATE, TIME, TIMESTAMP i INTERVAL. Typ TIMESTAMP obejmuje zarówno datę jak i czas.

Typów takich jak DATE używa się tak samo jak innych, na przykład do tworzenia kolumn tabeli

CREATE TABLE x(a int, b date);

2.2.1  Zewnętrzna reprezentacja dat

Przed wyświetleniem daty zamieniane są automatycznie na napis. Do konwersji używa się funkcji to_char, według ustalonego formatu domyślnego. U nas domyślnym formatem jest ISO, tzn. 'YYYY-MM-DD', na przykład

SELECT b FROM x;

B
----------
2004-04-01

Sposób wyświetlania daty można zmienić wywołując samemu to_char z własnym formatem

SELECT to_char(b, 'YYYY/MM/DD') AS b
FROM x;

B
----------
2004/04/01

Funkcja to_char ma składnię:

to_char(data, 'format')
W formacie można używać rozmaitych specyfikacji, najpopularniejsze to:

MM Miesiąc cyframi (np. 07)
MON Skrócona nazwa miesiąca (np. JUL)
MONTH Pełna nazwa miesiąca (np. JULY)
DD Dzień cyframi (np. 24)
DY Skrócona nazwa dnia tygodnia (np. FRI)
YYYY Rok czterema cyframi (np. 2004)
YY Dwie ostatnie cyfry roku (np. 04)

Przy wczytywaniu dat używa się funkcji date, zamieniającej napis na datę zgodnie z domyślnym formatem. Zwykle nie wywołuje się jej jawnie, ponieważ Postgres tam, gdzie jest wymagany argument typu data, automatycznie zamienia napis na datę wołając date, na przykład

insert into x values(99, '2004-05-31');

W innych sytuacjach trzeba jawnie wywoływać funkcję date.

Chcąc użyć innego formatu należy wywołać funkcje to_date:

INSERT INTO x
VALUES(99, to_date('2004/05/31', 'yyyy/mm/dd'));

Funkcja to_date ma składnię:

to_date(napis, 'format')
gdzie dla formatu obowiązują te same opcje co dla to_char.

Domyślny format daty zmienia się instrukcją SET DATESTYLE, na przykład:

SET DATESTYLE TO SQL, DMY;

Dozwolone wartości pierwszego parametru to: ISO, SQL, POSTGRES, a drugiego: EUROPEAN, US, NONEUROPEAN.

2.2.2  Bieżąca data i czas

Standardowe zmienne current_date i current_time zwracają bieżącą datę i czas.

SELECT current_date AS "Bieżąca data", current_time AS "Teraz";

Bieżąca data   Teraz
----------------------------
2004-01-01     21:18:27

Zmienna current_timestamp podaje zarówno datę jak i czas.

2.2.3  Operacje na datach

Daty można porównywać standardowymi operatorami porównania =, !=, >, itp.

Daty można odejmować od siebie, Otrzymując wynik typu TIMESPAN.

Do dat można dodawać liczby lub odejmować je od nich, na przykład current_date + 1 to dzień jutrzejszy.

Po przekształceniu na napis funkcją to_char, można na datach wykonywać wszelkie operacje dla napisów, na przykład

to_char(date, 'DD-MON-YY') LIKE '%JUN%'
zwraca prawdę jeśli mamy do czynienia z datą czerwcową.

2.3  Liczby

Dla liczbe określone są funkcje abs, round i trunc.