Mysql
 sql >> Database >  >> RDS >> Mysql

MySQL CONVERT_TZ()

Se risulta nullo, le tabelle TZ non sono state impostate:

SELECT CONVERT_TZ(now(),'US/Eastern','US/Central');

Se non hai impostato le tabelle dei fusi orari, puoi aggiornare l'offset orario nella tabella utente e quindi fare:

select utc_timezone() - interval user_timezone_offset_in_hours hour
from userinfo a
where user_id = 999;

Avresti comunque bisogno di un modo per aggiornare il fuso orario dell'utente.

Se stai scrivendo questo per un'applicazione web, puoi ottenere il fuso orario tramite javascript, ecco un articolo che descrive come (non l'ho provato ma sembra che funzionerà).

Una piccola spiegazione rispetto a 'intervallo' sopra...

Uno dei più trucchi costrutti in MySQL è l'uso di INTERVAL parola chiave, meglio mostrata dall'esempio (il valore numerico può essere un'espressione o il valore del campo)

select now() today, now() - interval 1 day yesterday;
+---------------------+---------------------+
| today               | yesterday           |
+---------------------+---------------------+
| 2011-05-26 13:20:55 | 2011-05-25 13:20:55 |
+---------------------+---------------------+

Puoi aggiungerli e sottrarli come preferisci, per questo io mai occuparsi delle funzioni di aggiunta/sottrazione/conversione di data/ora

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 |
+---------------------+---------------------+

Puoi utilizzare numeri negativi (dovrebbero essere utili per scostamenti di fuso orario negativi) questi sono gli stessi:

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 |
+---------------------+---------------------+