CREATE TABLE IF NOT EXISTS `config` (
`ID` int(11) NOT NULL AUTO_INCREMENT,
`time` time NOT NULL,
`zone` char(64) CHARACTER SET utf8 NOT NULL,
PRIMARY KEY (`ID`),
KEY `time_zone` (`time`,`zone`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=5 ;
看起来像这样:
ID TIME ZONE
-----------------------------
3 00:07:36 Pacific/Apia
1 10:01:50 Europe/London
2 12:07:20 Asia/Thimbu
4 00:01:50 US/Hawaii
该表显示了不同国家/地区的不同时间,我需要知道现在正在发生哪些时间。
如何退回时间 的所有ID
?
如果当前 UTC 时间 10:01:50 ,我想返回以下行:
ID TIME ZONE
-----------------------------
1 10:01:50 Europe/London
4 00:01:50 US/Hawaii
伦敦是UTC + 0,夏威夷是UTC -10,所以现在都发生了。
我知道MySQL内置了所有时区信息,但我不知道如何查询它。
答案 0 :(得分:1)
SELECT CONVERT_TZ(CONCAT(CURDATE(),' ',time),zone,'GMT') FROM config;
+---------------------------------------------------+
| CONVERT_TZ(CONCAT(CURDATE(),' ',time),zone,'GMT') |
+---------------------------------------------------+
| 2013-10-31 10:01:50 |
| 2013-10-31 11:07:36 |
| 2013-10-31 10:01:50 |
| 2013-10-31 06:07:20 |
+---------------------------------------------------+
请注意,这会假设日期行在日期和(在特定时间)时间方面都是不正确的。