我的数据库中的每条记录都SQLite
包含一个字段,该字段包含Date
存储为string
格式的 a 'yyyy-MM-dd HH:mm:ss'
。
请问是否可以查询数据库以获取包含最近日期的记录?
我的数据库中的每条记录都SQLite
包含一个字段,该字段包含Date
存储为string
格式的 a 'yyyy-MM-dd HH:mm:ss'
。
请问是否可以查询数据库以获取包含最近日期的记录?
你可以这样做
SELECT * FROM Table ORDER BY date(dateColumn) DESC Limit 1
对我来说,我有这样的查询来解决我的问题
select * from Table order by datetime(datetimeColumn) DESC LIMIT 1
因为我将它存储为日期时间而不是日期列
当您确定文本字段的格式为yyyy-MM-dd HH:mm:ss
(例如:)2017-01-02 16:02:55
时,它对我来说很简单:
SELECT * FROM Table ORDER BY dateColumn DESC Limit 1
没有任何额外的日期功能!
您需要将其转换为 unix 时间戳,然后进行比较:
SELECT * FROM data ORDER BY strftime('%s', date_column) DESC
但这可能会很慢,如果有很多行的话。更好的方法是默认存储 unix 时间戳,并为该列创建索引。
您可以将列转换sent_date_time
为yyyy-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
就我而言,一切正常,无需将列 强制转换为“日期”。只需用这样的双引号指定列名:
SELECT * FROM 'Repair' ORDER BY "Date" DESC;
我认为 SQLite 自己进行铸造或类似的东西,但是当我尝试自己“铸造”日期列时,它不起作用。并且没有错误消息。
您还可以使用以下查询
"SELECT * FROM Table ORDER BY strftime('%Y-%m-%d %H:%M:%S'," + dateColumn + ") DESC Limit 1"
如果您进行大量日期排序/比较,则可以通过将时间存储为刻度而不是字符串来获得更好的结果,这里展示了如何在刻度中获取“现在”:
((strftime('%s', 'now') - strftime('%S', 'now') + strftime('%f', 'now')) * 1000)
(见https://stackoverflow.com/a/20478329/460084)
然后很容易排序,比较等......
这适用于日期和时间
SELECT *
FROM Table
ORDER BY
julianday(dateColumn)
DESC Limit 1
我发现这个丑陋的黑客有效。
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
将文本列转换为日期字段类型会更好,但我发现这对我来说并不可靠。