web-dev-qa-db-ja.com

MySql SelectクエリでUTC日​​付をローカルタイムゾーンに変換する方法

私のMySQLデータベースのクエリの1つでこのWhere条件を使用しています私の問題は、テーブルに1つのdisplaytime列がありますが、そのテーブル列はUTC時間でデータを表示することであり、ローカル時間でそのdisplaytime列を変換したいですZone.soクエリ自体からこの機能を提供するにはどうすればよいですか。

私は物事をゴーグルし、それによってSELECT CONVERT_TZ()のようなものがそのために働くことを知っていましたが、それは私のために働いていません。

Displaytimeをローカルタイムゾーンに変換する必要があるクエリを次に示します。

WHERE displaytime >= '2012-12-01 00:00:00'
  AND displaytime <='2013-02-22 23:59:59'
  AND ct.organizationId IN (
    SELECT t.organizationId
      FROM organization_ AS t
      JOIN organization_ AS p ON t.treePath LIKE CONCAT(p.treePath, '%')
     WHERE p.organizationId = 10707

enter image description here サンプルデータ

enter image description here

46
User 1531343

SELECT CONVERT_TZ()はそのためには機能しますが、私には機能しません。

なぜ、どのエラーが表示されますか?

SELECT CONVERT_TZ(displaytime,'GMT','MET');

列タイプがタイムスタンプまたは日付の場合に機能するはずです

http://dev.mysql.com/doc/refman/5.0/en/date-and-time-functions.html#function_convert-tz

これがどのように機能するかをテストします:

SELECT CONVERT_TZ(a_ad_display.displaytime,'+00:00','+04:00');

タイムゾーンテーブルを確認してください

SELECT * FROM mysql.time_zone;
SELECT * FROM mysql.time_zone_name;

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

これらのテーブルが空の場合、タイムゾーンテーブルを初期化していない。上記のリンクによると、mysql_tzinfo_to_sqlプログラムを使用してタイムゾーンテーブルをロードできます。これを試してください

Shell> mysql_tzinfo_to_sql /usr/share/zoneinfo

または、動作していない場合の詳細: http://dev.mysql.com/doc/refman/5.5/en/mysql-tzinfo-to-sql.html

101
iiro

私の場合、タイムゾーンがサーバー上で利用できない場合、これはうまく機能します:

SELECT CONVERT_TZ(`date_field`,'+00:00',@@global.time_zone) FROM `table`

注:global.time_zoneはサーバーのタイムゾーンを使用します。目的のタイムゾーンがあることを確認する必要があります!

25
Felix Geenen
 select convert_tz(now(),@@session.time_zone,'+05:30')

「+05:30」を目的のタイムゾーンに置き換えます。ここを参照してください- https://stackoverflow.com/a/3984412/2359994

希望の時間形式にフォーマットするには、例えば:

 select DATE_FORMAT(convert_tz(now(),@@session.time_zone,'+05:30') ,'%b %d %Y %h:%i:%s %p') 

次のようになります-> 2014年12月17日10:39:56 AM

10
Som