Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/codeigniter/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Postgresql中创建带有日期时间间隔的WHERE子句?_Postgresql_Codeigniter - Fatal编程技术网

如何在Postgresql中创建带有日期时间间隔的WHERE子句?

如何在Postgresql中创建带有日期时间间隔的WHERE子句?,postgresql,codeigniter,Postgresql,Codeigniter,我需要检索结果行(从昨天下午3点到今天下午3点),每一行都有DateTime列(时间戳) 我怎么能对此提出质疑 我更喜欢codeigniter活动记录尝试以下方法: $this->db->where('`DateTime` BETWEEN "'. strtotime("yesterday 15:00"). '" and "'. strtotime("today 15:00").'"'); 使用PHP函数将文本日期转换为UNIX时间戳,然后使用它进行比较。类似于strotime(“昨

我需要检索结果行(从昨天下午3点到今天下午3点),每一行都有
DateTime
列(时间戳)

我怎么能对此提出质疑


我更喜欢codeigniter活动记录

尝试以下方法:

$this->db->where('`DateTime` BETWEEN "'. strtotime("yesterday 15:00"). '" and "'. strtotime("today 15:00").'"');
使用PHP函数将文本日期转换为UNIX时间戳,然后使用它进行比较。类似于
strotime(“昨天下午3点”)
strotime(“今天下午3点”)
的方法也应该有效。请注意,与服务器和PHP配置上的区域设置和安装设置相比,意外结果可能取决于数据库中不同的时间设置和区域设置

如果时间戳不是Unix时间戳,可以尝试以下两种方法:

$this->db->where("`DateTime` BETWEEN '". date('Y-m-d H:i:s', strtotime("yesterday 3pm")) ."'::timestamp AND '". date('Y-m-d H:i:s', strtotime("today 3pm"))."'::timestamp");
或:

由于中的@Oto和@pozs讨论,一种更简单、更好的方法是使用本机postgresql语法来比较时间戳:

$this->db->where("`DateTime` BETWEEN (current_date - 1) + time '15:00:00' AND current_date + time '15:00:00'");
编辑:请注意,如果您的列命名为
datetime
,则需要加回勾号,以免与PHP:s datetime函数混淆。更新了示例


更新:如果不使用Unix时间戳,则添加了替代语法。第三个示例使用本机postgresql语法来比较时间戳。

我不知道codeigniter活动记录,对于“纯”postgres,您可以使用这个:

SELECT * FROM yourtable 
WHERE datetime BETWEEN
to_timestamp ((CURRENT_DATE - interval '1 day')::date||' 15:00:00', 'YYYY-MM-DD HH24:MI:SS')
AND
to_timestamp (CURRENT_DATE ||' 15:00:00', 'YYYY-MM-DD HH24:MI:SS')

您既不提供表结构,也不提供名称。你期待什么?如何在Postgresql中创建带有日期时间间隔的WHERE子句?或多或少是这样:
从表中选择列,其中timestamp列位于timestamp和其他时间戳之间
您可以使用
(当前日期-1)+time'15:00:00'
当前日期+时间'15:00:00'
来避免不必要的铸件。@pozs
当前日期+时间'15:00:00'
这里无论如何都会进行铸造,只是内部的。不是吗?不完全是,有一个显式操作符
date+time
,它会导致
时间戳
。另外,
date+-int
会产生
date
(其中
int
是天数)。不涉及强制转换(也不需要使用长格式字符串的
to_timestamp
调用)。尝试此操作,,,获取错误
消息:pg_query():查询失败:错误:列“1490277600”不存在第5行:“1490277600”和“1490364000”之间的“DateTime”^
列名为
DateTime
?这可能是因为名称与php函数datetime相同。如果是这样的话,那么试着在你的文件名上打勾,比如'datetime',它是datetime。。也尝试使用其他名称..仍然错误!!可能您没有将日期存储为Unix时间戳?更新了我的答案,如果在postgresql中使用本机时间戳,请尝试两种选择
SELECT * FROM yourtable 
WHERE datetime BETWEEN
to_timestamp ((CURRENT_DATE - interval '1 day')::date||' 15:00:00', 'YYYY-MM-DD HH24:MI:SS')
AND
to_timestamp (CURRENT_DATE ||' 15:00:00', 'YYYY-MM-DD HH24:MI:SS')