2012-12-30 365 views
52

我的SQLite数据库中的每条记录都包含一个字段,其中包含以'yyyy-MM-dd HH:mm:ss'的格式存储为stringDateSQLite按日期排序

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

+6

您应该以毫秒为单位存储日期,并在每次需要显示时进行转换。这将使排序时更容易。 – Andrei

回答

113

,你可以做这样的

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

请注意,如果您想按日期**和时间**排序,则需要使用'date()'的datetime()'intead' – eliocs

2

你需要将其转换为UNIX时间戳,然后对它们进行比较:

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

但这可能是相当缓慢的,如果有大量的行。 更好的方法是默认情况下存储unix时间戳,并为该列创建索引。

34

对我来说,我有我查询这种方式来解决我的问题

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

+0

你的答案与以前的答案有什么不同?@Ahmad Baraka –

+0

@GowthamSubramaniam使用datetime()而不是date() – AnthoPak

1

您可以将列“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 
0

当你确定文本字段的格式是yyyy-MM-dd HH:mm:ss(例如:2017-01-02 16:02:55),因此它只是为我的作品:

SELECT * FROM Table ORDER BY dateColumn DESC Limit 1

无需任何额外的日期功能!

0

在我的情况下,一切工作正常没有铸造栏键入“日期”。只需用双引号这样的指定列名:

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

我想的SQLite使得本身或类似的东西铸造,但是当我自己试图“投”日期栏它没有奏效。并没有错误消息。