在考虑时区的情况下,在PostgreSQL中获取日期记录数
考虑到我在postgresql w/a created_at列中有一个签入表,我如何选择在给定日期(例如2012-10-17)创建的所有记录,同时考虑时区在考虑时区的情况下,在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'; 下面是给定日期的所有记录的
“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
运行时使用服务器设置)