P016
Problemy z datą w zapytaniach SQL


Jeżeli w zapytaniu (kwerendzie) chcemy wstawić pewnien warunek związany ze sprawdzaniem (porównywaniem) daty to czasem okazuje się, że napisane zapytanie nie działa poprawnie (albo wcale).

Najczęściej związane jest to z wpisaniem daty w złej postaci.
Access wymaga, żeby każda data, bez względu na językową wersje Accesa i ustawienia systemu, zawsze była wpisana w formacie Amerykańskim oraz była ujęta w znaki #.
Poprawne jest więc np.:

SELECT * FROM Tabela WHERE Data = #5/10/96#;

Na szczęście, zwykle nie musimy się martwić o odpowiednie przekształcanie daty. Jest bowiem specjalna funkcja która zrealizuje to za nas, uwzględniając odpowiednie ustawienia narodowe. Jest to funkcja DateValue, która jako argument przyjmuje datę zapisaną w formacie
'lokalnym' a zwraca odpowiednia datę 'uniwersalną'. Używamy jej w następujący sposób:

SELECT * FROM Tabela WHERE Data = DateValue('98-12-20')

Możliwe są też bardziej rozbudowane konstrukcje. Jeżeli chcemy znaleźć wszystkie rekordy dla których od Daty upłyneło więcej niż 30 dni, to należy wpisać:

SELECT * FROM Tabela WHERE DateAdd("d",30,Data) < DateValue('98-12-20')

Zamiast DateValue można też używać funkcji Date() która zwraca aktualną datę systemową.


Napisał: mfx, 1 czerwca 1999


[Strona główna] [Wyjście] [Poprzedni] [Następny]