Postgres:查找日期之间的日期

时间:2015-09-02 08:01:20

标签: php postgresql date

我有一个带有dateandtime列的Posgres表(YYYY-MM-DD HH:MM:SS格式)。

我需要找到某个日期之间的行,包括日期本身。

我目前正在使用这个:

SELECT x,y,z FROM table WHERE dateandtime between
DATE('".date('Y-m-d H:i:s',strtotime($from))."') and
DATE('".date('Y-m-d H:i:s',strtotime($to))."')

但这仅显示介于两者之间的日期,因此如果我选择:

从2015年2月15日至2015年2月15日。我没有看到任何东西,而不是看到第15天。

如果我这样做的话也一样:

从2015年2月14日至2015年2月15日。 我没有看到第15个,但只有第14个。

所以我的解决方法是在PHP中检查fromto日期是否相同,然后仅查找那一天。但这不是一个好的解决方案,我仍然有问题的第二部分。

按要求编辑

这是生成的查询:

SELECT x,y,z FROM table WHERE dateandtime between
DATE('2015-01-15 00:00:00') and
DATE('2015-01-15 00:00:00')

所以我添加了一个if:

SELECT x,y,z FROM table WHERE dateandtime BETWEEN
'".date('Y-m-d H:i:s',strtotime($from.' 00:00:00'))."' AND
'".date('Y-m-d H:i:s',strtotime($from.' 23:59:59'))."'

这就是结果:

SELECT x,y,z FROM table WHERE dateandtime BETWEEN
'2015-01-15 00:00:00' AND
'2015-01-15 23:59:59'

我遇到了同样的问题,因为if仅在fromto相同时进行检查。如果他们不是,我仍然有一天在范围之外。

添加了sqlfiddle

正如你所看到的,1月5日没有被采取:http://sqlfiddle.com/#!9/d50bd/1

1 个答案:

答案 0 :(得分:0)

解决您问题的最简单方法是使用<=>=运算符

SELECT x,y,z 
FROM table 
WHERE DATE('".date('Y-m-d H:i:s',strtotime($from))."') <= dateandtime 
  AND dateandtime <= DATE('".date('Y-m-d H:i:s',strtotime($to))."')