Typy danych cz.2
lipiec 2, 2009
Reprezentacja danych logicznych
SQL nie ma specjalnego typu do przechowywania danych logicznych. Taki typ miałby dwie możliwe wartości true i false. Do wartości logicznych można by użyć jednocyfrowej liczby całkowitej. Normalnie byłoby wtedy możliwe przechowywanie liczb od -9 do +9. Używając ograniczenia sprawdzającego CHECK, zakres dopuszczalnych wartości można jednak ograniczyć do 1 jako true i 2 jako false. Jednak użycie 1 jako true i 0 jako false ma tę zaletę, że pozwala użyć formuł matematycznych zapewniających obsługę podobną do tworzenia wyrażeń warunkowych na kolumnach. W takim przypadku zamiast operatora AND stosujemy mnożenie *, a zamiast operatora OR – dodawanie +.
Daty i określenia czasu – typ DATE
Do reprezentacji dat i czasu Oracle używa jednego typu danych – DATE, który obejmuje okres od pierwszego stycznia 4712 p.n.e. do 31 grudnia 4712 n.e. Kolumna typu DATE może przechowywać czas z dokładnością do sekund. Typ DATE jest całkiem uniwersalny: obsługuje dodawanie i odejmowanie okresów czasu od/do wskazanej daty. Pozwala w ten sposób określić dzień tygodnia i miesiąc roku dla wskazanej daty. Obsługiwane są także zagadnienia związane ze strefami czasowymi Ziemi. Kolumny typu DATE działają na bazie dni. Dodanie 1 do daty zwróci datę o jeden dzień większą, zaś 7 zwróci datę o tydzień późniejszą. Czas w ramach jednego dnia jest przedstawiany jako ułamek dnia. Wobec tego 12 godzin to połowa, 1/24 to godzina, 1 minuta to 1/1440, a 1 sekunda – 1/86400.
Dodawanie i odejmowanie dat i okresów
Zmienna długość roku wyrażonego w dniach wymaga specjalnego rodzaju obsługi przy robieniu jakichkolwiek wyliczeń. Jeśli chodzi o dni i godziny, konieczne jest dodawanie czy odejmowanie tylko liczb reprezentujących dni i ułamki. Przy dodawaniu miesięcy i lat konieczne jest użycie specjalnych funkcji. Ponieważ miesiące maja od 28 do 31 dni, dodawanie i odejmowanie dni nie pozwala dokładnie odwzorowywać miesięcy i lat. Jednak wykorzystanie wbudowanej funkcji ADD_MONTHS pozwala w sposób dokładny dodawać miesiące do daty.
Przykład.
Załóżmy, iż aktualną datą jest 1 października 2007 roku
SELECT SYSDATE dzis, ADD_MONTHS(SYSDATE,1)madd1, ADD_MONTHS(SYSDATE,3) madd3, ADD_MONTHS(SYSDATE,5) madd5, ADD_MONTHS(SYSDATE,-3) madd_3 FROM dual;
Wynikiem działania powyższego skryptu będzie:

Jak wiemy lata mają 365 dni lub 366. W przypadku konieczności dodawania lub odejmowania lat, także i w
tym przypadku wykonywanie tych operacji w oparciu o operacje dodawania lub odejmowania dni nie
przyniesienie pożądanych rezultatów. Choć nie ma wbudowanych żadnych specjalnych funkcji obsługi lat w
Oracle, to można wykorzystać do tego celu funkcję ADD_MONTHS i fakt, iż każdy rok składa się z 12
miesięcy.
Przykład.
Załóżmy, iż aktualną datą jest 1 października 2007 roku
SELECT SYSDATE dzis, ADD_MONTHS(SYSDATE,1*12) radd1, ADD_MONTHS(SYSDATE,3*12)
radd3, ADD_MONTHS(SYSDATE,5*12) radd5, ADD_MONTHS(SYSDATE,-3*12) radd_3
FROM dual;
Wynikiem działania powyższego skryptu będzie:

Z kolei w przypadku konieczności wyliczenia okresu pomiędzy dwoma datami w miesiącach czy latach
można wykorzystać wbudowaną funkcję MONTHS_BETWEEN.
Przykład.
Załóżmy, iż aktualną datą jest 1 października 2007 roku
SELECT MONTHS_BETWEEN(SYSDATE, TO_DATE(‘05/12/2007’,’dd/mm/yyyy’)) okr1,
MONTHS_BETWEEN(TO_DATE(‘01/04/2005’,’dd/mm/yyyy’), SYSDATE) okr2,
MONTHS_BETWEEN(TO_DATE(‘15/07/2009’,’dd/mm/yyyy’), SYSDATE) okr3
FROM dual;
Wynikiem działania powyższego skryptu będzie:

W przypadku konieczności wyliczenia lat należy wynik funkcji MONTHS_BETWEEN podzielić przez 12.
Entry Filed under: typy danych. Tagi: dane logiczne, DATE, typy, typy danych.
Trackback this post | Subscribe to the comments via RSS Feed