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