我在Android设备上的SQLite中有这个表:
CREATE TABLE IF NOT EXISTS MEN(_id INTEGER PRIMARY KEY AUTOINCREMENT,
Tdate date, Weight float, Total float, BMI float);
我以此日期格式插入数据(2011年5月31日22:34)
String Tdate = android.text.format.DateFormat.format("dd/MM/yyyy k:mm", new java.util.Date());
SQL = "insert into MEN (Tdate,Weight,Total,BMI) values ('";
SQL += Tdate + "','" + ThisWeight + "','" + Total + "','" + BMI+ "')";
我运行这样的查询:
SELECT _id,Tdate,Weight,Total,BMI FROM MEN ORDER BY Tdate desc
但是我看到数据没有排序:
31/05/2013 22:20
31/05/2013 19:06
29/04/2013 17:33
02/06/2013 19:25
02/06/2013 19:24
答案 0 :(得分:3)
到目前为止的评论部分正确 - SQLite并不真正支持日期类型。
虽然人们通常建议将日期存储为文字,例如“YYYY-MM-DD HH:MM:SS.SSS”,这不涉及时区,除非您以字符串格式包含它。如果您没有指定时区,SQLite函数将使用UTC,这可能不是您所期望的。
我认为最好的解决方案(除非你需要毫秒精度)是存储一个包含Unix纪元时间的整数(自UTC时间1970年1月1日午夜以来的秒数)。 SQLite日期函数直接支持它。
如果你需要毫秒,我会考虑将日期存储为Java Epoch时间(自UTC时间1970年1月1日午夜以来的毫秒数) - Unix纪元大约是Java Epoch / 1000.但是,在这种情况下,如果你'重新使用SQLite函数,使用它们时必须除以1000,否则你将失去毫秒精度。
见http://www.sqlite.org/datatype3.html和 http://www.sqlite.org/lang_datefunc.html
P.S。要非常小心SQL Injection漏洞 - 你应该绑定你的参数而不是将它们连接成一个sql语句。