2016-05-26 97 views
0

我试图从早期的订单日期晚与此查询:SQLite的订购日期

SELECT * FROM event where event_date >= strftime('%d/%m/%Y','now') ORDER BY event_date ASC; 

似乎但是不能完全工作(见图片)。第三行返回2016年3月12日的日期,晚于2016年5月31日的第4行。

enter image description here enter image description here

+1

您应该阅读[this](https://www.sqlite.org/datatype3.html)和[this](https://www.sqlite.org/lang_datefunc.html)。 TLDR:这些不是来自SQLite的POV的日期,它们是文本,它们被作为文本排序。 – Blorgbeard

+0

你的'event_date'可能是一个刺探,而不是一个日期时间数据字段。修复你的模式。 – C14L

+0

啊,是的,请阅读文档! –

回答

-1

event_date领域可能是一个VARCHAR类型,所以它的订单由23,然后通过67

速战速决将更改日期的符号来YYYYMMDD(年,月,日),因为即使是字符串也可以排序。

+1

SQLite中没有DATE数据类型。你只是使用YMD格式(如你所建议的),或整数(UNIX时间),或自4714 BC以来的浮点数。 (出于某种原因) - 全部按原样排序。 – Blorgbeard

+0

不知道,谢谢。不得不查看公元前4714年的奇怪事件:“朱利安时代是从公元前4713年开始的7980年的时间间隔。” ([源(https://en.wikipedia.org/wiki/Julian_day)) – C14L