-2

我有一个student包含以下列的表格:

no - integer
name - string 
startdate - date 
enddate - date. 

日期格式为MM/DD/YYYY.

我会给出一个日期作为输入。现在我需要一个inputdate在开始日期和结束日期之间找到的查询。

例如,我将给出一个示例04/14/2012,那么查询应该返回如图所示的第一条记录。

(因为输入日期 ( 04/14/2012) 位于04/10/2012to之间04/20/2012

请帮我。

在此处输入图像描述

4

4 回答 4

3

您遇到的问题是由于您假设 sqlite 具有日期/日期时间类型,而实际上它没有。

我建议您阅读以下http://www.sqlite.org/datatype3.html以更好地了解 sqlite 类型。

格式中的日期MM/DD/YYYY由 sqlite 作为 TEXT 处理,因此这些日期作为字符串进行比较。例如,如果直接比较,02/01/2012则认为比01/02/2012sqlite 大。

您需要将这些日期转换为可以进行字符串比较的格式。这是一个例子:

sqlite> create table foo (d TEXT);
sqlite> insert into foo values ('02/01/2012');
sqlite> select substr(d, 7, 4) || substr(d, 1, 2) || substr(d, 4, 2) from foo;
20120201
于 2012-04-12T14:29:08.347 回答
2

您应该发布到目前为止您已经尝试过的内容。

应该有一个between子句可以使用:

select * from table
where inputdate between startdate and enddate
于 2012-04-12T12:25:17.083 回答
0

日期作为 SQLite 中的日期类型不存在。有许多处理日期的方法 - 将它们存储为自 1970 年 1 月 1 日(unixepoch)以来的整数秒或将它们存储为字符串,但如果你这样做,那么你真的需要将它们存储为 'YYYY-MM-DD' 格式因为这是日期函数需要作为输入的内容。

假设您以我建议的格式使用字符串格式,那么您的查询将类似于

SELECT * FROM Table WHERE Date(Inputdate) BETWEEEN Date(startDate) AND Date(EndDate);

(尽管您可能希望将日期列的输出格式化为美国日期格式

SELECT Strftime("%m/%d/%Y",startDate) As StartDate ...

如果您使用 1970 年以来的秒数,它会更容易一些,因为秒数只是比较而不需要将它们转换为日期,尽管您仍然可能希望以美国日期格式输出,所以...

SELECT Strftime("%m/%d/%Y",startDate) As StartDate ... FROM Table WHERE inputDate BETWEEN startDate and EndDate;
于 2013-05-16T21:51:14.513 回答
0

sqlite> select *from tbl_node where mydate between '2014-02-02' and '2014-02-06';

它显示输出:-

1|1|123|456|12eb-ab|1|1|254|123|19|2014-02-03 16:00:44
2|1|123|456|12eb-ab|1|1|254|123|19|2014-02-03 16:01:03
3|1|123|456|12eb-ab|1|1|254|123|19|2014-02-03 16:00:57
4|1|123|456|12eb-ab|1|1|254|123|19|2014-02-03 16:00:34

这里 mydate 是 tbl_node 中的列名;我们也可以从当前时间使用,现在使用。

sqlite> select *from tbl_node where mydate between '2014-02-02' and 'now';

于 2014-02-06T07:16:08.717 回答