2012-12-30 40 views
52

Mọi bản ghi trong cơ sở dữ liệu SQLite của tôi chứa một trường có chứa Date được lưu trữ dưới dạng string ở định dạng 'yyyy-MM-dd HH:mm:ss'.Thứ tự SQLite theo Ngày

Có thể truy vấn cơ sở dữ liệu để nhận bản ghi có chứa ngày gần đây nhất không?

+6

Bạn nên lưu trữ ngày bằng mili giây và chuyển đổi mỗi khi bạn cần hiển thị nó. Điều này sau đó sẽ dễ dàng hơn khi sắp xếp, vv .. – Andrei

Trả lời

113

bạn có thể làm điều đó như thế này

SELECT * FROM Table ORDER BY date(dateColumn) DESC Limit 1 
+37

lưu ý rằng nếu bạn muốn sắp xếp theo ngày ** và thời gian **, bạn cần sử dụng 'datetime()' intead của 'date()' – eliocs

2

Bạn cần phải chuyển nó sang unix timestamp, và sau đó so sánh chúng:

SELECT * FROM data ORDER BY strftime('%s', date_column) DESC 

Nhưng điều này có thể được khá chậm, nếu có rất nhiều hàng. Cách tiếp cận tốt hơn là lưu trữ dấu thời gian unix theo mặc định và tạo chỉ mục cho cột đó.

34

Đối với tôi Tôi đã truy vấn của tôi theo cách này để giải quyết vấn đề của tôi

select * from Table order by datetime(datetimeColumn) DESC LIMIT 1 

Kể từ khi tôi đã lưu trữ nó như datetime không hẹn hò cột

+3

Ngoài ra, hàm date() trả về ngày theo định dạng này: YYYY-MM-DD. Hàm time() trả về thời gian là HH: MM: SS. Hàm datetime() trả về "YYYY-MM-DD HH: MM: SS". – wangqi060934

+0

Sự khác biệt nào bạn đã thực hiện với câu trả lời của bạn so với câu trả lời trước? @Ahmad Baraka –

+0

@GowthamSubramaniam sử dụng datetime() thay vì ngày() – AnthoPak

1

Bạn có thể chuyển đổi cột "sent_date_time" thành định dạng yyyy-MM-dd và sau đó đặt hàng theo ngày

1) substr(sent_date_time,7,4)||"-"||substr(sent_date_time,1,2)||"-"||substr(sent_date_time,4,2) as date 
2) order by date desc 
0

Khi bạn chắc chắn định dạng của text field là yyyy-MM-dd HH:mm:ss (ví dụ .: 2017-01-02 16:02:55), Vì vậy, Nó hoạt động đối với tôi chỉ đơn giản là:

SELECT * FROM Table ORDER BY dateColumn DESC Limit 1

Nếu không có bất kỳ chức năng cập nhật thêm!

0

Trong trường hợp của tôi, mọi thứ hoạt động tốt mà không cầnnhập cột để nhập 'ngày'. Chỉ cần bằng cách xác định tên cột với đôi dấu ngoặc kép như thế:

SELECT * FROM 'Repair' ORDER BY "Date" DESC; 

Tôi nghĩ SQLite làm cho đúc bởi chính nó hoặc một cái gì đó như thế, nhưng khi tôi đã cố gắng để 'đúc' Cột Ngày một mình nó không làm việc. Và không có thông báo lỗi.

Các vấn đề liên quan