私の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
サンプルデータ
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
私の場合、タイムゾーンがサーバー上で利用できない場合、これはうまく機能します:
SELECT CONVERT_TZ(`date_field`,'+00:00',@@global.time_zone) FROM `table`
注:global.time_zoneはサーバーのタイムゾーンを使用します。目的のタイムゾーンがあることを確認する必要があります!
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