相关疑难解决方法(0)

PostgreSQL 9.1时区

我正在使用postgresql在数据库上存储一些日期.
在我的应用程序中,它是完全了解时区的基础,我正在进行一些基本的测试,在客户端,服务器和数据库之间.

我从浏览器的应用程序中发送日期,我在GWT中读取了postgresql上的日期.

我的测试:

客户端始终处于GMT时区,我每个案例的发送时间总是相同.
13/04/2012 00:00:00 GMT + 00

在posgres我正在改变每个测试的时区.在测试之间,我正在从表中删除所有日期.

要更改posgres上的时区,我在{PostgreSQL HOME}\9.1\data\postgresql.conf上设置timezene到我想要的时间.

测试:客户:13/04/2012 00:00:00 GMT + 00

第1次测试 - posgres EST - 12/04/2012 19:00:00-05根据postgresql文档 EST = GMT - 5
第2次测试 - posgres GMT + 5 - 12/04/2012 19:00:00-05
第3次测试 - posgres GMT - 5 - 13/04/2012 05:00:00 + 05

现在我的问题上升了:根据文档,EST = GMT - 5.那么为什么我会以相反的方式阅读呢?我在这里错过了什么吗?

编辑 我测试的技术方面:
在客户端我发送此信息:2012年4月13日00:00:00 GMT + 00.
在服务器上我使用JDBC在db上编写:
将java.utils.date转换为java.sql.timestamp

java.sql.Timestamp sqlTimeStamp = new java.sql.Timestamp(date.getTime());
(日期是来自客户端的java.utils.Date)

设置准备好的声明
PreparedStatement ps = con.prepareStatement("INSERT INTO teste.dates (dates_tz, dates_ntz) VALUES …

postgresql timezone datetime jdbc

2
推荐指数
1
解决办法
2555
查看次数

Rails和PostgreSQL中的TimeZone和DST

背景

具有默认created_at列的文章模型

滑轨 config.time_zone = 'Warsaw'

我有一篇关于created_at =当地时间2012-08-19 00:15(UTC中的2012-08-18 22:15)的文章。

目标

接收2012-08-19(当地时间)创建的所有文章。

我的(无法正常工作)解决方案

Article.where(
  "date_trunc('day', created_at AT TIME ZONE '#{Time.zone.formatted_offset}')
   = '#{Date.civil(2012, 8, 19)}'"
)
Run Code Online (Sandbox Code Playgroud)

生成SQL:

SELECT "articles".* FROM "articles"
WHERE (date_trunc('day', created_at AT TIME ZONE '+01:00') = '2012-08-19')
Run Code Online (Sandbox Code Playgroud)

并返回一个空集。但是,如果我在psql中运行相同的查询,它将返回一条文章...,这使我感到困惑。

我在做什么错以及如何解决?

postgresql datetime ruby-on-rails dst rails-postgresql

1
推荐指数
1
解决办法
1387
查看次数

在考虑时区的同时获取PostgreSQL中日期的记录数

鉴于我在postgresql中有一个带有created_at列的checkins表,我如何在考虑时区的同时选择在给定日期(例如2012-10-17)创建的所有记录'America/New_York'(并考虑到夏令时)?

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

SELECT COUNT(*) AS count FROM checkins WHERE date(created_at) = '2012-10-17';
Run Code Online (Sandbox Code Playgroud)

这是给定日期的所有记录的列表.上面的查询返回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 …
Run Code Online (Sandbox Code Playgroud)

postgresql timezone timestamp

1
推荐指数
1
解决办法
310
查看次数

如何将不同模式的通用数据插入到临时表中?

我不知道如何解决这个问题:

我们从各种在线供应商(亚马逊、新蛋等)导入订单信息。每个供应商都有自己特定的订单术语和结构,我们已将其镜像到数据库中。我们的数据导入到数据库中没有任何问题,但是我面临的问题是编写一个从数据库中提取所需字段的方法,无论模式如何。

例如假设我们有以下结构:

新蛋结构:

"OrderNumber" integer NOT NULL, -- The Order Number
"InvoiceNumber" integer, -- The invoice number
"OrderDate" timestamp without time zone, -- Create date.
Run Code Online (Sandbox Code Playgroud)

亚马逊结构:

"amazonOrderId" character varying(25) NOT NULL, -- Amazon's unique, displayable identifier for an order.
"merchant-order-id" integer DEFAULT 0, -- A unique identifier optionally supplied for the order by the Merchant.
"purchase-date" timestamp with time zone, -- The date the order was placed.
Run Code Online (Sandbox Code Playgroud)

如何选择这些项目并将它们放入临时表中以供查询?

临时表可能如下所示:

"OrderNumber" character varying(25) NOT NULL,
"TransactionId" integer,
"PurchaseDate" timestamp with …
Run Code Online (Sandbox Code Playgroud)

java postgresql

1
推荐指数
1
解决办法
1858
查看次数

使用 date_trunc 的缺点

几年前,我听说在 sql 中截断日期不是一个好的做法。真的吗?

我需要从“yyyy-MM-dd”格式的表中获取日期类型列的值,日期当前以“yyyy-MM-dd hh:mm:ss”格式存储在表中

sql postgresql

1
推荐指数
2
解决办法
1921
查看次数

如何防止 Redshift INSERT 日期时间删除时区?

我有String这种格式的 a:2018-11-01T00:00:00-07:00我想将它转换为 aTIMESTAMP并将其插入到一TIMESTAMP列中。但是,当我插入它时,它会删除-07:00而不先将其转换为-00:00. 如何确保它被正确转换并存储在 Redshift 中?

下面是一个例子: select ORIGINAL_DATE, TO_TIMESTAMP(ORIGINAL_DATE,'YYYY-MM-DD HH24:MI:SS') FROM CDW_LANDING.X where id = XXXXXX;

=> 2018-11-01T00:00:00-07:00 2018-10-31 17:00:00

TO_TIMESTAMP其转换为2018-10-31 17:00:00这是我想要的。但是,当我插入它时,它会变成2018-11-01 00:00:00并简单地删除-07:00.

这是示例:

insert into cdw_stage.X (ORIG_DT) 
select TO_TIMESTAMP(ORIGINAL_DATE,'YYYY-MM-DD HH24:MI:SS') 
from CDW_LANDING.INVOICE where id = XXXXXX;
Run Code Online (Sandbox Code Playgroud)

但是当我用 查询它时select ORIG_DT from cdw_landing.X;,它显示2018-11-01 00:00:00. 我想看到的是2018-10-31 17:00:00这是什么样TO_TIMESTAMP的功能应该做的。

ORIG_DT在红移是TIMESTAMP格式。输入日期在VARCHAR …

sql amazon-redshift

1
推荐指数
1
解决办法
2843
查看次数

插入带有时区夏令时的时间

我想在 postgresql 中插入时间数据类型,其中包括时区并了解夏令时。这就是我所做的:

CREATE TABLE mytable(
    ...
    start_time time(0) with time zone,
    end_time time(0) with time zone
)

INSERT INTO mytable(start_time, end_time)
VALUES(TIME '08:00:00 MST7MDT', TIME '18:00:00 MST7MDT')
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

时间类型的输入语法无效:“08:00:00 MST7MDT”

如果我使用“MST”而不是“MST7MDT”,它就可以工作,但我需要它了解夏令时。我还尝试使用“美国/埃德蒙顿”作为时区,但出现了同样的错误。

插入带有时区和 DST 的时间值(不是时间戳)的正确方法是什么?

编辑:我实际上想使用“美国/埃德蒙顿”语法

sql postgresql timezone datetime dst

0
推荐指数
1
解决办法
3848
查看次数

通过时区获得时间间隔的差异

我在PostgreSQL中有一个表:

CREATE TABLE tableA
(
    time_A time with timezone
);
Run Code Online (Sandbox Code Playgroud)

如何获得now()和之间的分钟差异time_A

sql postgresql datetime

0
推荐指数
1
解决办法
7636
查看次数

如何显示没有时区的时间戳

@ object.updated_at.localtime显示“ 2015-04-20 14:39:27 -0700”。我不想显示-0700,是否有一种方法可以去除时区以进行显示?

time timezone ruby-on-rails

0
推荐指数
2
解决办法
4537
查看次数