在SQLite数据库中的日期操作之间

时间:2012-04-12 12:22:21

标签: sql database sqlite

我有一个表student,其中包含以下列:

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

日期格式为MM/DD/YYYY

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

举个例子,我会给04/14/2012,然后查询应该返回第一条记录,如图所示。

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

请帮帮我。

enter image description here

4 个答案:

答案 0 :(得分:3)

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

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

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

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

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

答案 1 :(得分:2)

你应该发布你到目前为止所尝试的内容。

您应该使用between子句:

select * from table
where inputdate between startdate and enddate

答案 2 :(得分: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;

答案 3 :(得分: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';