Định dạng mặc định sử dụng cho những ngày được xác định bởi mã lãnh thổ của DB2 cơ sở dữ liệu (mà có thể được quy định tại thời gian tạo cơ sở dữ liệu). Ví dụ: cơ sở dữ liệu của tôi đã được tạo bằng cách sử dụng lãnh thổ = Hoa Kỳ. Do đó, định dạng ngày có dạng như sau:
values current date
1
----------
05/30/2003
1 record(s) selected.
Bạn có thể lấy mã lãnh thổ từ 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
Đó là, định dạng là MM/DD/YYYY. Nếu bạn muốn thay đổi định dạng, bạn có thể ràng buộc tập hợp các gói tiện ích db2 để sử dụng một định dạng ngày khác.
Để có được hiện nay, thời gian, và dấu thời gian sử dụng SQL, (về cơ bản cung cấp cho bạn một ý tưởng về những gì các định dạng ngày là) tham khảo các thanh ghi DB2 thích hợp: Bảng sysibm.sysdummy1 là một đặc biệt trong bộ nhớ bảng có thể được sử dụng để khám phá giá trị của DB2 đăng ký
db2 "SELECT current date FROM sysibm.sysdummy1 "
1
----------
06/02/2014
1 record(s) selected.
các hàm DATE vẫn hoạt động ngay cả khi chúng ta bỏ qua các dấu ngoặc kép trong chức năng, nhưng kết quả là không đúng:
db2 "SELECT date(2001-09-22) FROM sysibm.sysdummy1 "
1
----------
05/24/0006
1 record(s) selected.
Khi hàm DATE nhận được một chuỗi ký tự làm đầu vào, nó giả định rằng nó là biểu diễn ký tự hợp lệ của một ngày DB2 và chuyển đổi nó cho phù hợp. Ngược lại, khi đầu vào là số, hàm này giả định rằng nó đại diện cho số ngày trừ đi một từ đầu của thời đại hiện tại (nghĩa là, 0001-01-01). Trong truy vấn trên, đầu vào là 2001-09-22, bằng (2001-9) -22, tương đương với 1970 ngày.
Và nếu tất cả những điều trên được áp dụng, lệnh dưới đây sẽ hoạt động tốt cho vấn đề của bạn.
SELECT * FROM table WHERE registrationdate > '10/01/2002';
Làm thế nào là "registrationdate" cột được xác định? Có thể loại dữ liệu cột không phải là ngày, nếu có, thì truy vấn ban đầu của bạn sẽ hoạt động. – NealB