0

我正在尝试使用一些条件来根据开始和结束日期选择记录。基本上我想要任何没有结束日期或在给定期间开始或在同一给定期间结束的东西。任何关于如何实现这一点的帮助或指导将不胜感激。我包括下面查询的 WHERE 部分和参数绑定,但如果需要可以包括更多。

$periodsCxn->bindParam(':PositionID',$PositionID);
$periodsCxn->bindParam(':Start',$firstPayPeriod);
$periodsCxn->bindParam(':End',$lastPayPeriod);
$periodsCxn->bindParam(':Start2',$firstPayPeriod);
$periodsCxn->bindParam(':End2',$lastPayPeriod);

WHERE
        POSITION_PERIOD.PositionID = :PositionID AND
        (
            (
                POSITION_PERIOD.EndDate = '1900-01-01'
                OR
                POSITION_PERIOD.EndDate IS NULL
            )
            OR
            (
                POSITION_PERIOD.StartDate BETWEEN :Start AND :End
                OR
                POSITION_PERIOD.EndDate BETWEEN :Start2 AND :End2
            )
        )       
4

1 回答 1

0

令我惊讶的是,您想要任何没有结束日期的记录,但在其他情况下要比较开始日期。

通常,使用此类数据,您想知道给定期间是否与另一个期间重叠,即使该期间可能没有结束日期。重叠的逻辑是:

where POSITION_PERIOD.PositionID = :PositionID AND
      POSITION_PERIOD.StartDate <= :End and
      (POSITION_PERIOD.EndDate >= :Start or
       POSITION_PERIOD.EndDate = '1900-01-01' or
       POSITION_PERIOD.EndDate IS NULL
      )

这假定变量具有有效日期。

于 2012-10-15T13:46:24.133 回答