我有一个带有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中检查from
和to
日期是否相同,然后仅查找那一天。但这不是一个好的解决方案,我仍然有问题的第二部分。
按要求编辑
这是生成的查询:
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仅在from
和to
相同时进行检查。如果他们不是,我仍然有一天在范围之外。
添加了sqlfiddle
正如你所看到的,1月5日没有被采取:http://sqlfiddle.com/#!9/d50bd/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))."')