Wstęp
Ostatnio walczyłem z polem daty w tabeli. Jako, ze najczęściej wykorzystuje SQL Server jako back-end, trochę mnie to stresów kosztowało…
Postanowiłem się zatem podzielić kilkoma wskazówkami.
Oczywiste jest to, że baza (a konkretnie tabela) nie trzyma w tabeli wartości w postaci daty, tylko jako liczbę, problem polega na tym, że czasami chcemy dodać za pomocą zapytań jakiś rekord lub wyszukać w warunku where po dacie.
Wskazówki
Pytając o datę umieśćmy ją w hash’ach np tak: #7/26/2012#. I nie, nie pomyliłem się w formacie daty dokładnie ma być miesiac/dzień/rok i koniecznie rozdzielany slash-em.
Format to cos co kosztowało mnie dużo nerwów w systemie w opcjach regionalnych jest data krótka w formacie rrrr-MM-dd i stąd niby czerpie Access swoją wiedzę o formacie daty. Jednak w bebechach już tak nie jest, bo zmienia ją do formatu amerkańskiego…
Odkryłem to przez przypadek, stworzyłem kwerendę w QBE i tam wpisałem datę w postaci #2012-07-25#, kwerenda to był insert i zadziałała, natomiast z poziomu VBA i ADO krzyczała o niezgodnym formacie pola. Zdziwienie moje było gdy z widoku projektu kwerendy przeszedłem na widok SQL i tam format był amerykański…
W vba najprosciej go osiągnąć tak:
format("2012-07-25","m\/d\/yyyy")
Zakończenie
Mam nadzieje, ze oszczędzi to komuś trochę nerwów…
OMG, ostatnio miałem problem z update rekordów z datami i stwierdziłem że tekstowy format musi mi wystarczyć. Oczywiście mści się to potwornie bo zamiast ograniczenia warunkiem to muszę sprawdzając dane w pętli interpretując ją na datę… wrr. W ORA to takie łatwe, a tu osobno insert i osobno update w innej konstrukcji koszmar.
zW SQL Server również z poziomu ADO jak robimy update na tabeli to używam konwerta: polezdata = convert(datetime,’2014-02-07′,121), bo bez tego wywali błąd konwersji, można też wprowadzić updatem datę w formacie yyyyMMdd, ‘20140207’ wtedy problemu nie ma, daty dla ludzi z poza ustawień US to generalnie temat na książkę;)