2012-09-27 28 views
3

我无法找到解决问题的解决方案。在HTML5中对日期时间进行排序Web SQL数据库

我有这样的一个表中的HTML5的Web SQL数据库:

db.transaction(function(tx) { 
     tx.executeSql("CREATE TABLE IF NOT EXISTS todo " + 
     "(todoId INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, " + 
     "note VARCHAR(100) NOT NULL, " + 
     "state VARCHAR(100) NOT NULL, " + 
     "todoDate DATETIME NOT NULL)"); 
}); 

当我添加值到这个数据库(符号= DD-MM-YYYY),它看起来像todoDate添加为字符串到数据库。 当我收集和使用以下查询数据库中的某些todoDate值进行排序,该值在错误的顺序进行排序:

sql = "select * FROM todo order by todoDate asc"; 

输出:

   todoId -  note  - state   - todoDate 
      3  -  blabla  - someinfo  - 01-01-2013 
      1  -  blabla  - someinfo  - 22-09-2012 
      2  -  blabla  - someinfo  - 25-10-2012 

我想获得下列顺序:

   todoId -  note  - state   - todoDate 
      1  -  blabla  - someinfo  - 22-09-2012 
      2  -  blabla  - someinfo  - 25-10-2012 
      3  -  blabla  - someinfo  - 01-01-2013 

我该如何做到这一点?

我发现函数str_to_date,但它不工作,或者我做错了什么。

在此先感谢!

回答

0

我找到了解决方案。

下面是代码:

SELECT * FROM tablename ORDER by substr(dateColumn,7)||substr(dateColumn,4,2)||substr(dateColumn,1,2); 
0
Like that query you can fire : 
select * from (select column1,...,convert(date,column) from table) as a order by dateColumn 
+0

当我将查询更改为: sql =“select * from(从todo选择todoDate,注意convert(date,todoDate))order by todoDate”; 我错了什么? – StackFlower

4

的HTML5的Web SQL数据库实际上是SQLite的引擎盖下。 SQLite doesn't have a DATETIME type。如果你发送它们的字符串,它会将它们存储为字符串。 SQLite建议您使用ISO-8601规范格式(例如“2012-09-22”),以便比较按预期工作。 SQLite提供了一些有用的日期时间函数来处理数据库中的日期时间值。请参阅here。或者,你可以存储毫秒,但我个人更喜欢存储字符串,因为它们是人类可读的,这有助于调试。

相关问题