2017-03-24 6 views
0

私は各社が個別のタイムゾーンを持つ会社のテーブルを持っています。例えば - 会社1は、時間帯UTC + 10と 会社2を有し、 - UTC + 2タイムゾーン付きのPostgresクエリ

テーブルcompaniesは(私は場合UTCからストアオフセット値のための追加のフィールドを追加することができ、フィールドTIME_ZONEとAmerica/Los_Angeles等ゾーンの記憶されている略語を有します必要)。例えば、タイムゾーン(UTC-0) ずにTIMESTAMPを保存start_dateのフィールドと

と持つテーブル要求 - id | company_id | start_date(utc-0) 1 1 21-03-16 02-00 // added for company `21-03-16 12-00` 2 2 21-03-16 23-00 // added for company `22-03-16 01-00` 3 1 20-03-16 13-00 // added for company `20-03-16 23-00` 4 1 21-03-16 23-00 // added for company `22-03-16 09-00

私は21-する21-03-16 00-00から開始レコードを選択します各企業のタイムゾーンを考慮した03-16 23-59

が、私が使用する場合 -

select * from request where start_date between '2016-03-21 00:00:00.000000' AND '2016-03-21 23:59:59.999999'

私は、ID = 2と4

要求を取得するが、これらの要求は、各企業のための事実によって22-03-16を追加しました。

どのように私はこの状況を1つ選択することができますか?どうもありがとう。

+0

2016年3月21日00」BETWEEN TIME ZONEのcompanies.time_zone AT request.start_date 'のように:00:00Z 'AND' 2016-03-21 23:59:59.999999Z''? OFCこれは、すべての行が 'time_zone'にPostgreSQLで受け入れられたタイムゾーンを持つときにのみ機能します。 'CHECK((タイムスタンプ '2000-01-01 00:00:00' AT TIME ZONE time_zone)IS NOT NULL ')'のようなチェック制約を定義して 'time_zone'を検証することができます。 – pozs

答えて

1

ご質問が正しいかどうか分かりませんが、明確にする必要があります。

しかし、私はタイムゾーン情報が格納されているcompaniesに参加しても問題が解決しなければならないことを言うと思います:

SELECT r.* 
FROM request r 
    JOIN companies c ON c.id = r.company_id 
WHERE r.start_date BETWEEN '2016-03-21 00:00:00.000000' 
          AT TIME ZONE c.time_zone 
         AND '2016-03-21 23:59:59.999999' 
          AT TIME ZONE c.time_zone; 
関連する問題