SQL日期范围不包括所有记录

时间:2015-06-24 14:47:22

标签: sql sql-server

我有一个SQL语句:

select * from formsresponse fr, formsresponses frs
where fr.formsresponse_id = frs.formsresponse_id 
and fr.form_submitdate >= '3/13/2015' and fr.form_submitdate <= '3/31/2015'

奇怪的是,它会为3/13到3/27的记录带回结果集,但是日期为3/31的记录不会回来。他们在数据库中。该字段是日期时间字段。这对我来说毫无意义。我甚至尝试了使用BETWEEN语句的SQL,我得到了相同的结果。

任何人都可以向我解释为什么会发生这种情况吗?

2 个答案:

答案 0 :(得分:3)

你的日期时间也包含时间成分,所以它不是00:00:00?使用小于运算符:

Patch xPatch = new Patch();
xPatch.op = "replace";
xPatch.path = "/";
xPatch.value = new Plan() { state = "ACTIVE" };

PatchRequest yPatch = new PatchRequest();
yPatch.Add(xPatch);

cPLan.Update(apiContext, yPatch);

同样使用YYYYMMDD比其他格式

更安全

答案 1 :(得分:0)

您还可以将fr.form_submitdate字段转换为日期类型,而无需进行比较。

SELECT
    *
FROM
    formsresponse fr,
    formsresponses frs
WHERE
    fr.formsresponse_id = frs.formsresponse_id
    AND CAST(fr.form_submitdate AS DATE) BETWEEN '3/13/2015' AND '3/31/2015'

假设您出于某种原因可能在日期时间字段中有索引,并且您需要更改过程中的结束日期,则只需将1天添加到结束日期。

SELECT
    *
FROM
    formsresponse fr,
    formsresponses frs
WHERE
    fr.formsresponse_id = frs.formsresponse_id
    AND fr.form_submitdate BETWEEN '3/13/2015' AND DATEADD(DAY, 1, '3/31/2015')