SQLite按日期排序1530019888000


69

SQLite数据库中的每条记录都包含一个字段,其中包含一个以格式Date存储string'yyyy-MM-dd HH:mm:ss'

是否可以查询数据库以获取包含最近日期的记录?


7
您应该以毫秒为单位存储日期,并在每次需要显示时进行转换。于是,这将使它更容易在排序时等
安德烈

Answers:


146

你可以这样

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

56
请注意,如果你想按日期和时间,你需要使用datetime()的这一翻译date()
eliocs

3
如果日期字符串的格式为“ dd-mm-yyyy”怎么办?对于您的答案不起作用
TejpalBh

1
这回答使我感到困惑。对我而言,无需在日期字段名称周围使用“日期”或“日期时间”功能。检查Nabi KAZ答案
user1105951 '20

42

对我来说,用这种方式可以解决我的问题

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

由于我将其存储为日期时间而不是日期列


3
此外,date()函数以以下格式返回日期:YYYY-MM-DD。time()函数将时间返回为HH:MM:SS。datetime()函数返回“ YYYY-MM-DD HH:MM:SS”。
wangqi060934 2014年

您的答案与上一个答案有何不同?@Ahmad Baraka
Gowtham Subramaniam

9

当您确定文本字段的格式为yyyy-MM-dd HH:mm:ss(例如:)时2017-01-02 16:02:55,它对我来说很简单:

SELECT * FROM Table ORDER BY dateColumn DESC Limit 1

没有任何额外的日期功能!


5

您需要将其转换为unix时间戳,然后进行比较:

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

但是,如果有很多行,这可能会很慢。更好的方法是默认存储unix时间戳,并为该列创建索引。


3

您可以将列转换sent_date_timeyyyy-MM-dd格式,然后按日期排序:

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

2

在我的情况下,一切正常,而无需 强制转换列为“ date”。只需使用这样的引号指定列名:

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

我认为SQLite本身可以进行类型转换,但是当我尝试自己“投射”日期列时,它不起作用。而且没有错误消息。


如果我认为Sqlite使用添加单元格数据的日期/时间,则此方法不起作用,当我更改一个单元格Dat列时,它仍在更新日期之后对其进行排序,例如 i.ibb.co/Qv1zKQC/sqlitedatetime.png
Salem

1

您还可以使用以下查询

"SELECT * FROM Table ORDER BY strftime('%Y-%m-%d %H:%M:%S'," + dateColumn + ") DESC  Limit 1"

0

如果您进行大量日期排序/比较,则可以通过将时间存储为刻度而不是字符串来获得更好的结果,这里显示了如何通过以下方式获取刻度中的“现在”:

((strftime('%s', 'now') - strftime('%S', 'now') + strftime('%f', 'now')) * 1000)

(请参阅https://stackoverflow.com/a/20478329/460084

然后很容易进行排序,比较等...


1)OP具有SARGable值,因此无需进行转换。2)您要转换NOW的是存储值,而不是存储的值,所以这并不是很有帮助... 3)似乎有更好的转换(如公认的答案),不需要手动转换。您的答案比其他任何答案有什么好处?
Clockwork-Muse

1)SARG?不知道那是什么.. 2)'现在'只是一个例子,更新了我的答案,3)接受的答案将在每次比较之前将字符串转换为int,这非常低效,我认为不适用于排序索引
kofifus

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.