0

エポックからミリ秒単位の列で一括クエリ更新を実行しようとしています。where句に従って返された各行について、時間値を渡されたものに更新し、それをミリ秒単位で保存したいと思います。私の更新句はどのように見える必要がありますか?

たとえば、2行あります

MY_TIMESTAMP  | VALUE
----------------------
1281275302000 | some val 1
1347198502000 | some val 2

行 1 は、2010 年 8 月 8 日 (日) 13:48:22 UTC に対応します。行 2 は、2012 年 9 月 9 日 (日) 13:48:22 UTC に対応します。

ここで、両方の時刻を 07:00:00 に設定したいと思いますが、日付はそのままにしておきます。したがって、更新ステートメントの結果は次のようになります。

MY_TIMESTAMP  | VALUE
----------------------
1281250800000 | some val 1
1347174000000 | some val 2

2010 年 8 月 8 日 (日) 07:00:00 UTC および 2012 年 9 月 9 日 (日) 07:00:00 UTC に対応

4

2 に答える 2

0

FROM_UNIXTIME を使用してこれを行うことができます。

UPDATE MY_TABLE
  SET MY_TIMESTAMP = (UNIX_TIMESTAMP(TIMESTAMP(DATE(FROM_UNIXTIME(MY_TIMESTAMP / 1000 + 14400)), '07:00:00')) - 14400) * 1000;

この選択で正しい結果が得られるかどうかをテストします。

SELECT (UNIX_TIMESTAMP(TIMESTAMP(DATE(FROM_UNIXTIME(MY_TIMESTAMP / 1000 + 14400)), '07:00:00')) - 14400) * 1000 
   FROM MY_TABLE LIMIT 100;

PS 14400 は、UTC からの秒単位のオフセットに対応します。異なる場合は、変更してください。

于 2012-10-16T14:19:44.927 に答える
0

タイムゾーンの考慮を避けるために、単純な計算だけで可能です。

UPDATE MY_TABLE
SET MY_TIMESTAMP = MY_TIMESTAMP - (MY_TIMESTAMP % 86400000) + 25200000

MY_TIMESTAMP - (MY_TIMESTAMP % 86400000)時間なしで日付を返します

25200000ミリ秒で 7 時間に相当します。

于 2012-10-16T14:37:14.750 に答える