比较android sqlite数据库中的日期(存储为字符串)?

时间:2012-05-31 11:40:18

标签: android sqlite date

我将日期String存储在我的数据库中,格式为:

YYYY-MM-DD HH:MM:SS

是支持的格式之一(http://www.sqlite.org/lang_datefunc.html)。现在我想将这些存储的日期(好吧,字符串)与另一个日期进行比较。我的日期存储在column_date列中,所以我正在尝试这个:

SELECT  * FROM MyTable
WHERE 
(Date(column_date) >= Date (2000-01-01) AND Datetime(column_date) <= Datetime (2050-01-01))

当我阅读文档时,The date and time functions use a subset of IS0-8601 date and time formats. The date() function returns the date in this format: YYYY-MM-DD.所以我想,我做得对 - 我从存储的字符串创建日期并将其与从其他字符串创建的日期进行比较。

但它不起作用,即使column_date是今年的日期,并且你可以看到开始和结束日期是非常仁慈的。也试过这个(使用日期时间而不是日期):

SELECT  * FROM MyTable
    WHERE 
    (datetime(column_date) >= Date (2000-01-01) AND datetime(column_date) <= Datetime (2050-01-01))

和此(使用介于而不是&lt; =和&gt; =)

SELECT  * FROM MyTable
    WHERE 
    (Date(column_date) between Date (2000-01-01) AND Datetime (2050-01-01))

以及所有其他可能的组合。我到底做错了什么,我是愚蠢的,还是文件说谎,或者我错过了一些非常重要的事情?试着找几个小时的解决方案,但没有任何作用......

5 个答案:

答案 0 :(得分:19)

如果您将日期存储为格式为

的字符串
YYYY-MM-DD HH:mm:ss  

====&GT;那么你的日期字段是DateTime数据类型

因此你必须使用这样的查询

select * 
  from MyTable 
  where mydate >= Datetime('2000-01-01 00:00:00') 
  and mydate <= Datetime('2050-01-01 23:00:59')

你也可以使用@Joop Eggen给出的代码片段与运算符之间的代码相同。

BETWEEN 运算符在逻辑上等同于一对比较。 “x BETWEEN y AND z”等同于“x&gt; = y AND x&lt; = z”,但使用BETWEEN时,x表达式仅评估一次。见sqlite3 docs

答案 1 :(得分:6)

SELECT *
FROM MyTable
WHERE 
    column_date BETWEEN '2000-01-01 00:00:00' AND '2050-01-01 23:00:59'

应该做的伎俩。这只使用字符串,但你说这是合适的。

错误是缺少时间部分或仅在日期部分执行子程序。然后数据/时间转换功能也可能给出错误的东西。

答案 2 :(得分:3)

我认为你的问题在这里......

AND Datetime(column_date) <= Datetime (2050-01-01))

为什么在这里使用Datetime而不是Date?

试试这个:

SELECT  * FROM MyTable WHERE (Date(column_date) >= Date (2000-01-01) AND Date(column_date) <= Date (2050-01-01))

答案 3 :(得分:2)

在SQLite表中提交的日期将是TEXT,日期数据应存储为“2012-12-31 00:12:00”格式,比较不会给您带来麻烦,如果我们认为字段是date_from和date_to,我们将当前日期存储在to_date然后我们应该将当前日期设置为低于和

        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        String to_date = sdf.format(new Date());

并且SQL查询应该是

    crs = db.rawQuery(
      "SELECT _id, date_from, date_to, done_or_not, list_name " +
      "FROM list_tbl " +
      "WHERE " +
      "date_from <= Datetime('"+to_date+"') AND date_to >= Datetime('"+to_date+"')", null);

答案 4 :(得分:0)

比较android SQLite数据库中的日期(存储为字符串)。使用12/07/2015格式的日期并使用如下查询:

SELECT * FROM tableName WHERE Date >=('12/07/2015') and appointmentDate <('13/07/2015')";

这适合我。