2015-09-02 37 views
0

我有一个带日期和时间列(YYYY-MM-DD HH:MM:SS格式)的Posgres表。Postgres:找到日期之间包括日期本身

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

我目前使用这样的:

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))."') 

但这仅显示的日期,所以如果我选择:

从15/02/2015 - 15/02/2015到。我没有看到任何东西,而不是看到第15天。

同样的事情,如果我这样做:

从14/02/2015 - 15/02/2015到。 我看不到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') 

所以我增加了一个如果:

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' 

我有同样的问题,因为如果只检查fromto是否相同。如果他们不是,我还有一天超出范围。

新增sqlfiddle

正如你可以看到jannuary第五届不采取:http://sqlfiddle.com/#!9/d50bd/1

+0

我我只会给你一些关于sql注入的建议,请使用准备好的语句。 –

+0

向我们提供您的表格,其中包含一些示例数据(www.sqlfiddle.com),并将链接返回此处 –

+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))."') 
+1

不行的'一个x和y'等价于'a> = x AND a <= y' –

+0

@RaymondNijland你是对的,我弄糊涂经营者的顺序。看起来像'BETWEEN'不太容易出错。 –