1

我正在尝试从表中检索不同日期的列表。它们以整数形式存储。

cal.getTime().getTime()

返回自 1970 年 1 月 1 日 00:00:00 GMT 以来此 Date 对象表示的毫秒数。

我写的

select strftime('%d-%m-%Y'," + date_clmn + ") from "
                + TABLE_NAME +" group by strftime('%d-%m-%Y'," + date_clmn + ")"

接下来,我将这些值转换为字符串。我得到什么:

24-11--471

之后,当我尝试使用

strftime('%d-%m-%Y',date_clmn)=24-11--471

我什么都得不到。

怎么了?

使用这种方式我会遇到时区问题吗?

如果有其他方法可以做到,我会很高兴听到你的声音。

提前致谢。

更新

Tried "date(" + date_clmn+ ",'unixepoch')"
now retrieved value is "1970-01-01"
4

2 回答 2

5

由于您没有在表格中存储日期,因此您需要更改字段。试试这个代码:

"select strftime('%d-%m-%Y'," + date_clmn + "/1000,'unixepoch') from "
+ TABLE_NAME +" group by strftime('%d-%m-%Y'," + date_clmn + "/1000,'unixepoch')"
于 2013-08-28T19:11:46.590 回答
4

我添加这个是因为我认为它可能对某人有帮助。根据文档 strftime()返回给定格式的字符串日期。所以在这个条款中:

strftime('%d-%m-%Y',date_clmn) = 24-11--471
    ^                               ^
  string                         this expression returns an integer

这里有一个 SQLite 没有检测到的类型不匹配。甚至查询也会完美运行(我对其进行了测试并且没有错误地运行),但它当然不会检索任何行。

正确的比较是:

strftime('%d-%m-%Y',date_clmn) = '24-11--471'

测试:这里有一小段代码来测试这种行为:

CREATE TABLE dateTest(myDate VARCHAR);
INSERT INTO dateTest(myDate) VALUES ('2013-08-29 18:57:00');
SELECT strftime('%Y-%m-%d',myDate) AS formatted, myDate FROM dateTest WHERE strftime('%Y-%m-%d') = 2013-08-29; /* this won't retrieve any row */
SELECT strftime('%Y-%m-%d',myDate) AS formatted, myDate FROM dateTest WHERE strftime('%Y-%m-%d') = '2013-08-29'; /* this will retrieve '2013-08-29 | '2013-08-29 18:57:00' */

这是输出:

在此处输入图像描述

于 2013-08-29T22:24:49.433 回答