在考虑时区的情况下,在PostgreSQL中获取日期记录数

在考虑时区的情况下,在PostgreSQL中获取日期记录数,postgresql,timezone,timestamp,Postgresql,Timezone,Timestamp,考虑到我在postgresql w/a created_at列中有一个签入表,我如何选择在给定日期(例如2012-10-17)创建的所有记录,同时考虑时区“America/New_York”(并考虑夏令时) 目前我正在psql(PostgreSQL)9.1.6中执行以下查询,但它似乎缺少一些在一天结束时添加的记录 SELECT COUNT(*) AS count FROM checkins WHERE date(created_at) = '2012-10-17'; 下面是给定日期的所有记录的

考虑到我在postgresql w/a created_at列中有一个签入表,我如何选择在给定日期(例如2012-10-17)创建的所有记录,同时考虑时区
“America/New_York”
(并考虑夏令时)

目前我正在psql(PostgreSQL)9.1.6中执行以下查询,但它似乎缺少一些在一天结束时添加的记录

SELECT COUNT(*) AS count FROM checkins WHERE date(created_at) = '2012-10-17';
下面是给定日期的所有记录的列表。上面的查询返回10,这是不正确的。我应该13点回来

  id  | waiver_id |         created_at         |         updated_at         
------+-----------+----------------------------+----------------------------
 1391 |         1 | 2012-10-18 00:42:07.308453 | 2012-10-18 00:42:07.308453
 1390 |       286 | 2012-10-18 00:38:53.102685 | 2012-10-18 00:38:53.102685
 1389 |       590 | 2012-10-18 00:38:28.811605 | 2012-10-18 00:38:28.811605
 1388 |         7 | 2012-10-17 22:29:25.610774 | 2012-10-17 22:29:25.610774
 1387 |      1155 | 2012-10-17 22:01:40.647219 | 2012-10-17 22:01:40.647219
 1386 |      1154 | 2012-10-17 22:00:05.477698 | 2012-10-17 22:00:05.477698
 1385 |      1153 | 2012-10-17 21:57:59.698076 | 2012-10-17 21:57:59.698076
 1384 |      1152 | 2012-10-17 21:08:32.533203 | 2012-10-17 21:08:32.533203
 1383 |      1151 | 2012-10-17 21:07:42.500036 | 2012-10-17 21:07:42.500036
 1382 |       115 | 2012-10-17 21:04:03.075333 | 2012-10-17 21:04:03.075333
 1381 |         3 | 2012-10-17 20:30:13.741647 | 2012-10-17 20:30:13.741647
 1380 |       245 | 2012-10-17 20:29:53.808852 | 2012-10-17 20:29:53.808852
 1379 |      1150 | 2012-10-17 20:27:30.057269 | 2012-10-17 20:27:30.057269
签入列和数据类型

 column_name |          data_type          
-------------+-----------------------------
 updated_at  | timestamp without time zone
 created_at  | timestamp without time zone
 waiver_id   | integer
 id          | integer

根据您的具体需要,构造可以提供帮助

如果您的列类型为,并且您的本地时间设置为与EST不同的时区,但您希望在EST获得相应的日期,则这将是您的查询:

SELECT count(*) AS ct
FROM   checkins
WHERE  (created_at AT TIME ZONE 'EST')::date = '2012-10-16';
无法确定,您的问题缺少基本信息,并留有解释的余地。
全面解释PostgreSQL的时区处理,并提供示例和链接

如果要自动覆盖夏令时,请使用时区名称,而不是时区缩写。比如:

created_at AT TIME ZONE 'America/New_York'

有关这方面的更多信息,请参见。

根据您的具体需要,构造可以提供帮助

如果您的列类型为,并且您的本地时间设置为与EST不同的时区,但您希望在EST获得相应的日期,则这将是您的查询:

SELECT count(*) AS ct
FROM   checkins
WHERE  (created_at AT TIME ZONE 'EST')::date = '2012-10-16';
无法确定,您的问题缺少基本信息,并留有解释的余地。
全面解释PostgreSQL的时区处理,并提供示例和链接

如果要自动覆盖夏令时,请使用时区名称,而不是时区缩写。比如:

created_at AT TIME ZONE 'America/New_York'

有关这方面的更多信息,请参见。

我已经尝试过了,但我仍然得到了10个结果,而不是13个。有什么想法吗?还有,我的问题缺少什么基本信息?我可以提供你所需要的一切need@KyleDecot:以下内容将有所帮助:在处创建的的确切数据类型;“在考虑时区时”未说明日期应适用于哪个时区;执行查询的本地时区(时区名称);显示示例数据的当前时区(是否相同?);你想考虑DST吗?你的PostgreSQL版本。我只是注意到一些奇怪的东西。如果我做了
从签入中选择count(*)作为ct,其中(在时区'GMT'创建)::date='2012-10-17'我返回13,这是正确的数字。我觉得这很奇怪。我只是对postgres中时区的工作方式感到困惑吗?@KyleDecot:当你运行
SHOW timezone
时,你会得到什么?数据库服务器的时区是什么?(使用
localtime
运行时使用服务器设置)我已经尝试过了,但仍然得到了10个结果,而不是13个。有什么想法吗?还有,我的问题缺少什么基本信息?我可以提供你所需要的一切need@KyleDecot:以下内容将有所帮助:在
处创建的的确切数据类型;“在考虑时区时”未说明日期应适用于哪个时区;执行查询的本地时区(时区名称);显示示例数据的当前时区(是否相同?);你想考虑DST吗?你的PostgreSQL版本。我只是注意到一些奇怪的东西。如果我做了
从签入中选择count(*)作为ct,其中(在时区'GMT'创建)::date='2012-10-17'我返回13,这是正确的数字。我觉得这很奇怪。我只是对postgres中时区的工作方式感到困惑吗?@KyleDecot:当你运行
SHOW timezone
时,你会得到什么?数据库服务器的时区是什么?(使用
localtime
运行时使用服务器设置)