1

日時フィールドを含むテーブルがあります。現在の IST 時間より上の datetime 値を持つレコードのみという条件でレコードを選択したいと考えています。

select * from mytable where dt > current_ist_datetime

current_ist_datetime使い方がわからないものです。CONVERT_TZ()NOW()で指定できます。しかし、mysql が使用するタイムゾーンがわかりません。つまり、渡す必要がある 2 番目のパラメーターがわからないCONVERT_TZ()

4

2 に答える 2

0

SQL ステートメントを使用して、現在の MySQL セッションのタイムゾーン設定を取得できます。

mysql> SELECT @@session.time_zone;

DBA が MySQL のタイムゾーンを設定していない場合、SYSTEMオペレーティング システムのタイムゾーンを表す の値がデフォルトになります。

http://dev.mysql.com/doc/refman/5.5/en/time-zone-support.html


ファローアップ:

あなたの例のSQL文のような述語で:

select * from mytable where dt > current_ist_datetime

(指定dtされcurrent_ist_datetime、 datatype のDATETIME)値に関連付けられたタイムゾーン情報がないため、値の比較はタイムゾーン変換とは無関係DATETIMEです。

つまり、datatype の列から返される値は、MySQL サーバー ( ) または MySQL セッション ( )DATETIMEの time_zone 設定の影響を受けません。SELECT @@global.time_zoneSELECT @@session.time_zone

ただし、関数によって返される値はNOW()、セッションの time_zone 設定の影響を受けます。

IST で返されたものを取得するには、セッションの time_zone が正しく指定されていることを確認します。

SET VARIABLES time_zone = "+05:30"

(注: セッションが接続プールから取得されて返される場合、プールの他のユーザーは別の time_zone を期待していない可能性があります;...)

(注: 上記は、MySQL の DATETIME データ型の実装と Java の Date オブジェクトの実装との間の「インピーダンスの不一致」(差異) によって引き起こされる、JDBC ドライバーによって引き起こされる混乱を完全に無視しています。JDBC 接続を介して DATETIME 値を渡す場合は、それは完全に「別の混乱のボールです。」)

于 2013-06-09T12:37:04.767 に答える
0

MySQL は 2 つの形式でタイムゾーンを使用します。つまり、'Asia/Calcutta' または '+05:30' (IST の場合) のいずれかを使用できます。ただし、後者を使用することをお勧めします。

UTC のタイムゾーンは「+00:00」です。dtしたがって、次のクエリを使用できUTCますcurrent_ist_datetimeIST

select * from mytable where dt > CONVERT_TZ(current_ist_datetime,'+05:30','+00:00')

私は自分のプロジェクトでこのクエリを使用しています。ここでは、クライアント (IST) からサーバー (UTC) に & それが魅力的に機能しますcurrent_ist_datetime+05:30

mysqlを使用する場合NOW()、システムのタイムゾーンの現在の日時が選択されます

select * from mytable where dt > CONVERT_TZ(NOW(),'+05:30','+00:00')

これらのクエリは、必要に応じて変更できます。

于 2015-08-14T08:29:18.127 に答える