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:

typy

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:

typy2

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:

typy3

W przypadku konieczności wyliczenia lat należy wynik funkcji MONTHS_BETWEEN podzielić przez 12.

Entry Filed under: typy danych. Tagi: , , , .

Leave a Comment

Required

Required, hidden

Some HTML allowed:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <pre> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Trackback this post  |  Subscribe to the comments via RSS Feed


Linki

Najnowsze wpisy

Najnowsze komentarze

marian boczek w Proces projektowania baz …
sc w Przykładowe zapytania SQL
Bart Cart w Podstawy z baz ciąg dalszy…
Tomek w Definicja bazy danych
Tomek w Relacyny model danych

Kategorie

Archiwa

Tagi

Access baza danych bazy podstawy bazy SQL CHAR dane logiczne DATE definicja instrukcje komendy model danych modele baz modelowanie NUMBER operatory podstawy proces projektowania projektowanie projektowanie baz relacyjna schemat SELECT sql struktura typy typy danych VARCHAR where zapytania