2017-06-14 16 views
1

私はNetezza SQLデータベースで作業しています。他の列に基づいてNetezzaのタイムスタンプに時間を追加する

  • datetime1で:UTC時刻にトランザクションのタイムスタンプを持つ
  • TIME_OFFSET:私は2列を持つUTCからユーザーのタイムゾーンのオフセットを示す整数で、あります。たとえば、UTC + 1のユーザーは、私がやりたいどのような値1

は時間としてDATETIME1列にTIME_OFFSET列を追加されています。

+---------------------+-------------+------------+---------------------+ 
|  DATETIME1  | TIME_OFFSET | SIMPLE_ADD | ADD_ONE_HOUR  | 
+---------------------+-------------+------------+---------------------+ 
| 2017-06-01 08:01:45 |   1 | 2017-06-02 | 2017-06-01 09:01:45 | 
| 2017-06-01 08:03:45 |   2 | 2017-06-03 | 2017-06-01 09:03:45 | 
+---------------------+-------------+------------+---------------------+ 

しかし私がしたいことは第二に、最初の行と2時間に1時間を追加して:これは以下の出力を生成

SELECT * 
FROM ADMIN.INTEGRAL_ADSCIENCE_1845 

WITH my_table AS (
SELECT TIMESTAMP('2017-06-01 08:01:45') AS datetime1, 
    1 AS time_offset 
UNION 
SELECT TIMESTAMP('2017-06-01 08:03:45') AS datetime1, 
    2 AS time_offset 
) 
SELECT 
    DATETIME1, 
    TIME_OFFSET, 
    DATETIME1 + TIME_OFFSET AS simple_add, 
    DATETIME1 + INTERVAL '1 hour' AS add_one_hour 
FROM my_table; 

Iは、次の再現例を作成しました行。

私はmysql date_add()機能を認識していますが、残念なことにNetezzaに限られています。

答えて

1

これはうまくいくはずです。

WITH my_table AS (SELECT TIMESTAMP('2017-06-01 08:01:45') AS dttm 
          , 1 AS tm_offset 
         UNION 
        SELECT TIMESTAMP('2017-06-01 08:03:45') AS dttm 
          , 2 AS tm_offset) 
SELECT dttm 
     , tm_offset 
     , dttm + tm_offset AS simple_add 
     , dttm + CAST(tm_offset || ' hour' AS INTERVAL) 
    FROM my_table; 
+0

ありがとう。私は間隔を置いてキャストすることを考えなかった。私は '+ INTERVAL tm_offset || '時間'は、動作しませんでした。 – niczky12

+0

ええと、Netezzaがクエリを評価する順序と関係があります。 – joeb

関連する問題