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

qkx*_*qkx 17 sqlite android date

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

YYYY-MM-DD HH:MM:SS
Run Code Online (Sandbox Code Playgroud)

这是受支持的格式之一(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))
Run Code Online (Sandbox Code Playgroud)

当我阅读文档时,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))
Run Code Online (Sandbox Code Playgroud)

和这个(使用之间而不是<=和> =)

SELECT  * FROM MyTable
    WHERE 
    (Date(column_date) between Date (2000-01-01) AND Datetime (2050-01-01))
Run Code Online (Sandbox Code Playgroud)

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

K_A*_*nas 22

如果您将日期存储为格式的字符串

YYYY-MM-DD HH:mm:ss  
Run Code Online (Sandbox Code Playgroud)

====>那么您的日期字段是DateTime数据类型

因此,您必须使用此类查询

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

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

BETWEEN操作者在逻辑上等同于一对比较."x BETWEEN y AND z"等效于"x> = y AND x <= z",除了使用BETWEEN,x表达式仅评估一次.请参阅sqlite3 文档


Joo*_*gen 6

SELECT *
FROM MyTable
WHERE 
    column_date BETWEEN '2000-01-01 00:00:00' AND '2050-01-01 23:00:59'
Run Code Online (Sandbox Code Playgroud)

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

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