Hvis dette giver null, er TZ-tabellerne ikke blevet sat op:
SELECT CONVERT_TZ(now(),'US/Eastern','US/Central');
Hvis du ikke har sat tidszonetabellerne op, kan du opdatere timeoffset i brugertabellen og derefter gøre:
select utc_timezone() - interval user_timezone_offset_in_hours hour
from userinfo a
where user_id = 999;
Du har dog stadig brug for en måde at opdatere brugerens tidszone på.
Hvis du skriver dette til en webapplikation, kan du få tidszonen via javascript, her er en artikel der beskriver hvordan (har ikke prøvet dette, men det ser ud til at det vil virke).
Lidt af en forklaring med hensyn til 'interval' ovenfor...
En af de mere trick-konstruktioner i MySQL er brugen af INTERVAL
nøgleord, bedst vist som eksempel (den numeriske værdi kan være et udtryk eller feltværdien)
select now() today, now() - interval 1 day yesterday;
+---------------------+---------------------+
| today | yesterday |
+---------------------+---------------------+
| 2011-05-26 13:20:55 | 2011-05-25 13:20:55 |
+---------------------+---------------------+
Du kan tilføje dem og trække dem fra, som du vil, det er derfor, jeg aldrig genere med dato/klokkeslæt tilføje/fradrag/konvertere funktioner
select now() a, now() - interval 1 day + interval 4 hour + interval 8 minute b;
+---------------------+---------------------+
| a | b |
+---------------------+---------------------+
| 2011-05-26 13:24:16 | 2011-05-25 17:32:16 |
+---------------------+---------------------+
Du kan bruge negative tal (bør være gode til negative tidszoneforskydninger) disse er de samme:
select now() - interval 1 month a, now() + interval -1 month b;
+---------------------+---------------------+
| a | b |
+---------------------+---------------------+
| 2011-04-26 13:38:05 | 2011-04-26 13:38:05 |
+---------------------+---------------------+