Domyślny format używany do terminów zależy od kodu terytorium DB2 bazy danych (który może być określony w momencie tworzenia bazy danych). Na przykład moja baza danych została utworzona przy użyciu obszaru = US. Dlatego format daty wygląda następująco:
values current date
1
----------
05/30/2003
1 record(s) selected.
Możesz otrzymać kod terytorium od DB CFG.
db2 get db cfg | egrep 'code|territory'
Database territory = US
Database code page = 1208
Database code set = UTF-8
Database country/region code = 1
Oznacza to, że format jest MM/DD/YYYY. Jeśli chcesz zmienić format, możesz powiązać kolekcję pakietów narzędziowych db2, aby użyć innego formatu daty.
Aby uzyskać aktualną datę, czas i datownik za pomocą SQL (w zasadzie daje wyobrażenie o tym, co jest format daty) odwołać się do odpowiednich rejestrów DB2: sysibm.sysdummy1 stół jest specjalny in-memory stół, który może być używany do odkrywania wartości DB2 rejestruje
db2 "SELECT current date FROM sysibm.sysdummy1 "
1
----------
06/02/2014
1 record(s) selected.
funkcja DATA nadal działa, nawet jeśli pominąć cytaty w funkcji, ale wynik nie jest prawidłowy:
db2 "SELECT date(2001-09-22) FROM sysibm.sysdummy1 "
1
----------
05/24/0006
1 record(s) selected.
Gdy funkcja DATE pobiera ciąg znaków jako dane wejściowe, zakłada, że jest poprawną reprezentacją znaku daty DB2 i odpowiednio ją konwertuje. Natomiast gdy dane wejściowe są numeryczne, funkcja przyjmuje, że reprezentuje liczbę dni minus jeden od początku bieżącej ery (czyli 0001-01-01). W powyższym zapytaniu wprowadzono 2001-09-22, co odpowiada (2001-9) -22, co równa się 1970 dni.
Jeśli powyższe warunki mają zastosowanie, poniższe polecenie powinno działać prawidłowo w przypadku problemu.
SELECT * FROM table WHERE registrationdate > '10/01/2002';
Jak jest "registrationdate" kolumny zdefiniowane? Być może typ danych kolumny nie jest datą, jeśli tak było, wtedy twoje pierwotne zapytanie powinno zadziałać. – NealB