77

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

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

4

10 回答 10

160

你可以这样做

SELECT * FROM Table ORDER BY date(dateColumn) DESC Limit 1
于 2012-12-30T14:01:08.237 回答
47

对我来说,我有这样的查询来解决我的问题

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

因为我将它存储为日期时间而不是日期列

于 2013-08-18T15:15:10.567 回答
10

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

SELECT * FROM Table ORDER BY dateColumn DESC Limit 1

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

于 2017-11-02T02:35:18.570 回答
5

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

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

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

于 2012-12-30T13:50:08.663 回答
4

您可以将列转换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
于 2014-12-17T09:59:42.583 回答
2

就我而言,一切正常,无需将列 强制转换为“日期”。只需用这样的引号指定列名:

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

我认为 SQLite 自己进行铸造或类似的东西,但是当我尝试自己“铸造”日期列时,它不起作用。并且没有错误消息。

于 2018-02-05T11:59:47.487 回答
1

您还可以使用以下查询

"SELECT * FROM Table ORDER BY strftime('%Y-%m-%d %H:%M:%S'," + dateColumn + ") DESC  Limit 1"
于 2020-02-29T21:59:26.543 回答
0

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

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

(见https://stackoverflow.com/a/20478329/460084

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

于 2018-11-27T23:02:09.167 回答
0

这适用于日期和时间

SELECT * 
FROM Table 
ORDER BY 
julianday(dateColumn) 
DESC Limit 1
于 2020-03-03T10:58:58.730 回答
0

我发现这个丑陋的黑客有效。

select *, substr(date_col_name,7,4)as yy, substr(date_col_name,4,2) as mm, substr(date_col_name,1,2) as dd from my_table order by yy desc,mm desc,dd desc

将文本列转换为日期字段类型会更好,但我发现这对我来说并不可靠。

于 2021-10-11T01:06:03.910 回答