SQLite không có loại DATETIME chuyên dụng. Thông thường những gì mọi người làm là đảm bảo rằng họ lưu trữ ngày dưới dạng chuỗi được định dạng nhất quán; ví dụ: YYYY-MM-DD hh: mm: ss. Nếu bạn làm như vậy, miễn là bạn phù hợp, sau đó bạn có thể so sánh trực tiếp ngày:
SELECT * FROM a WHERE q_date < '2013-01-01 00:00:00';
này hoạt động bởi vì mặc dù sự so sánh về mặt kỹ thuật là một sự so sánh chữ cái và không phải là một số, số ngày trong một định dạng phù hợp giống như sắp xếp theo thứ tự bảng chữ cái cũng như số lượng.
Đối với lược đồ như vậy, tôi khuyên bạn nên lưu trữ ngày ở định dạng 24 giờ (ví dụ trên là nửa đêm). Pad tháng, ngày và giờ với số không. Nếu ngày của bạn sẽ kéo dài nhiều múi giờ, lưu trữ tất cả trong UTC và thực hiện bất kỳ chuyển đổi nào bạn cần phía máy khách để chuyển đổi chúng thành múi giờ địa phương.
Thông thường ngày và giờ được lưu trữ tất cả trong một cột. Nếu bạn phải tách chúng ra vì bất kỳ lý do nào, chỉ cần đảm bảo rằng ngày tháng của bạn đều nhất quán và thời gian của bạn đều nhất quán. Ví dụ: tất cả ngày phải là YYYY-MM-DD và tất cả thời gian phải là hh: mm: ss.
Lý do YYYY-MM-DD hh: mm: ss là định dạng ưa thích là vì khi bạn đi từ khoảng ngày lớn nhất (năm) đến nhỏ nhất (giây), bạn có thể lập chỉ mục và sắp xếp chúng rất dễ dàng và với hiệu suất cao.
SELECT * FROM a WHERE q_date = '2012-06-04 05:06:00';
sẽ sử dụng chỉ mục để trau dồi vào ngày/giờ thay vì phải quét toàn bộ bảng. Hoặc nếu chúng ở hai hàng riêng biệt:
SELECT * FROM a WHERE q_date = '2012-06-04' AND q_time = '05:06:00';
Điều quan trọng là đảm bảo ngày và giờ ở định dạng nhất quán đi vào cơ sở dữ liệu. Để trình bày thân thiện với người dùng, hãy thực hiện tất cả phía máy khách chuyển đổi, không phải trong cơ sở dữ liệu. (Ví dụ: chuyển đổi '2012-06-04 05:06:00' thành "1:06 sáng Đông 6/4/2012".)
Nếu điều này không trả lời câu hỏi, bạn có thể vui lòng đăng định dạng chính xác không mà bạn đang sử dụng để lưu trữ ngày và giờ của mình và hai ngày ví dụ mà bạn đang cố gắng so sánh không hoạt động theo cách bạn mong đợi?
bạn nên đã gửi của bạn "không-làm việc" mã –
Tôi không nhìn thấy điểm như tôi chắc chắn 100% dương tính so sánh thời gian/ngày là vấn đề. Nhưng nếu nó quan trọng đến mức tôi sẽ sẵn lòng bắt buộc. Xin lỗi vì điều đó. – Andy
Bằng cách "so sánh hai ngày", bạn có nghĩa là "so sánh hai lần trong ngày", phải không? –