Om detta ger null har TZ-tabellerna inte ställts in:
SELECT CONVERT_TZ(now(),'US/Eastern','US/Central');
Om du inte har ställt in tidszonstabellerna kan du uppdatera timförskjutningen i användartabellen och sedan göra:
select utc_timezone() - interval user_timezone_offset_in_hours hour
from userinfo a
where user_id = 999;
Du skulle dock fortfarande behöva ett sätt att uppdatera användarens tidszon.
Om du skriver detta för en webbapplikation kan du få tidszonen via javascript, här är en artikel som beskriver hur (har inte provat detta men det ser ut som att det kommer att fungera).
Lite av en förklaring med avseende på 'intervall' ovan...
En av de fler trickkonstruktionerna i MySQL är användningen av INTERVAL
nyckelord, som bäst visas som exempel (det numeriska värdet kan vara ett uttryck eller fältvärdet)
select now() today, now() - interval 1 day yesterday;
+---------------------+---------------------+
| today | yesterday |
+---------------------+---------------------+
| 2011-05-26 13:20:55 | 2011-05-25 13:20:55 |
+---------------------+---------------------+
Du kan lägga till dem och subtrahera dem hur du vill, det är därför jag aldrig bry dig om funktionerna för att lägga till/subtrahera/konvertera datum/tid
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 använda negativa siffror (borde vara bra för negativa tidszonförskjutningar) dessa är desamma:
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 |
+---------------------+---------------------+