SQL - 选择具有日期和时间条件的行

时间:2017-03-23 22:09:49

标签: mysql sql

我正在尝试选择所有小于或等于今天日期的行(此部分正在运行)但我不想要今天的行,其中$ time小于结束时间

测试表:{ID,日期,状态,checkid}

检查表:{checkid,startt,endt}:start和end是时间值,如下所示。

$time = '15:00:00'; 

$query = ("SELECT test.ID, test.status, check.startt, check.endt FROM test INNER JOIN check ON test.checkid=check.checkid 
WHERE test.date <='$date' AND $time < check.endt");

如果时间小于检查表中的结束时间,则查询不会显示任何内容。我知道我做错了但我无法弄明白,我正在尝试if语句atm。

1 个答案:

答案 0 :(得分:0)

基本上代码你所描述的... I.e. test.date =“今天”

时的特殊处理

日期条件“1”仅适用(但今天不包括在内)
条件“2”涉及日期和时间(今天)。

WHERE    test.date < $date
      OR (test.date = $date AND check.endt <= $time)

注意:请注意,如果您尝试组合日期和时间,以便执行单一比较:这是可能的;但查询将无法利用索引,因此不建议。

PS:您的要求有更直接的翻译。不幸的是,它更加冗长,优化者可能无法找到最佳计划。

where   test.date <= $date
    and test.id not in (
        select  test.id
        from    ...
        where   test.date = $date
            and check.endt > $time
        )

同样适用于支持EXCEPT子句的平台(显然很多流行的子句除了mysql):

select  Col1, Col2
from    ...
where   test.date <= $date
except
select  Col1, Col2
from    ...
where   test.date = $date and check.endt > $time

EXCEPT语法非常自然地读取,即使它非常详细。