Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/80.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
存储在SQLite数据库中的排序日期_Sql_Database_Sqlite_Date_Datetime - Fatal编程技术网

存储在SQLite数据库中的排序日期

存储在SQLite数据库中的排序日期,sql,database,sqlite,date,datetime,Sql,Database,Sqlite,Date,Datetime,我使用的是SQLite数据库(不是我的),我必须按日期排序一些数据 我在网上做了很多搜索,但是没有找到解决方案 带有日期的字段类型为“日期”,格式为:DD/MM/YYYY HH:MM:SS 我尝试了很多函数,比如strftime、datetime、date等等。。。但是我不能正确地对日期排序。 例如,如果我这样做: SELECT * FROM events ORDER BY start_date SELECT start_date FROM events ORDER BY strftime('

我使用的是SQLite数据库(不是我的),我必须按日期排序一些数据

我在网上做了很多搜索,但是没有找到解决方案
带有日期的字段类型为“日期”,格式为:
DD/MM/YYYY HH:MM:SS

我尝试了很多函数,比如strftime、datetime、date等等。。。但是我不能正确地对日期排序。 例如,如果我这样做:

SELECT * FROM events ORDER BY start_date
SELECT start_date FROM events ORDER BY strftime('%d/%m/%Y %H:%M:%S', start_date)
日期2013年10月4日00:00:00是在2013年12月3日之后。。。你知道我的意思吗

我真的不知道怎样才能按这种格式排序

谢谢你的帮助

更新1:

我试过这样的方法:

SELECT * FROM events ORDER BY start_date
SELECT start_date FROM events ORDER BY strftime('%d/%m/%Y %H:%M:%S', start_date)
这样做对吗? 结果:没有错误,但没有任何更改。日期没有排序

更新2:

laalto的解决方案:

select * from tab order by substr(col,7,4)||'-'||substr(col,4,2)||'-'||substr(col,1,2)||'T'||substr(col,12);

最好的方法是在插入阶段对数据进行排序,例如插入ISO-8601戳记或unixtime整数,但由于它不是您的数据库,所以假设您无法影响它

您可以使用
substr()
从日期时间字符串中提取部分,并构造一个ISO-8601日期时间字符串,您可以按字典顺序进行排序,从而按时间顺序进行排序

例如:

sqlite> create table tab(col);
sqlite> insert into tab values('04/10/2013 00:00:00'),('03/12/2013 00:00:00');
sqlite> select substr(col,7,4)||'-'||substr(col,4,2)||'-'||substr(col,1,2)||'T'||substr(col,12) as date from tab order by date;
2013-10-04T00:00:00
2013-12-03T00:00:00
sqlite> select * from tab order by substr(col,7,4)||'-'||substr(col,4,2)||'-'||substr(col,1,2)||'T'||substr(col,12);
04/10/2013 00:00:00
03/12/2013 00:00:00

请看一下STRFTIME()函数,它允许您选择日期的特定部分(小时、完整日期、时间等),然后按该部分排序。不知道为什么你的不起作用。例如-按strftime从事件顺序中选择*(“%s”,开始日期)谢谢Steven,我现在就看;)您可能要检查日期格式?是在年月日吗?如果是,那么无论你得到什么都是正确的。我认为您不需要使用日期函数来按日期排序column@IndoKnight否,格式为dd/mm/yyyy HH:mm:SS