sql >> Databasteknik >  >> RDS >> Mysql

Använder IST-tid i mysql-fråga

Du kan hämta tidszonsinställningen för den aktuella MySQL-sessionen med en SQL-sats:

mysql> SELECT @@session.time_zone;

Om DBA inte har ställt in tidszonen på MySQL kommer den att ha värdet SYSTEM som standard. , som representerar tidszonen i operativsystemet.

http://dev.mysql.com/doc /refman/5.5/en/time-zone-support.html

UPPFÖLJNING:

I ett predikat som i ditt exempel SQL-sats:

select * from mytable where dt > current_ist_datetime

(givet dt och current_ist_datetime av datatypen DATETIME )jämförelsen av värdena kommer att vara oberoende av eventuell tidszonkonvertering, eftersom det inte finns någon tidszonsinformation kopplad till en DATETIME värde.

Det vill säga värdet som returneras från en kolumn av datatypen DATETIME påverkas inte av tidszonsinställningen för MySQL-servern (SELECT @@global.time_zone ) eller av MySQL-sessionen (SELECT @@session.time_zone ).

Värdet som returneras av NOW() funktionen kommer dock att påverkas av tidszonsinställningen för sessionen.

För att få det returnerat i IST, se till att tidszonen för sessionen är korrekt specificerad, t.ex.

SET VARIABLES time_zone = "+05:30"

(OBS. Om sessionen hämtas från och returneras från en anslutningspool, kanske de andra användarna av poolen inte förväntar sig en annan tidszon;...)

(OBS:ovanstående ignorerar helt den förvirring som introduceras av JDBC-drivrutinen, orsakad av "impedansmismatch" (skillnader) mellan MySQL:s implementering av DATETIME-datatypen och Java-implementeringen av Date-objektet. Om du skickar DATETIME-värden över en JDBC-anslutning, det är en helt annan boll av förvirring.)



  1. Hur får man MySQL att behandla understreck som en ordavgränsare för fulltextsökning?

  2. Så här ändrar du språket för din Oracle-session

  3. Hur man använder LIKE i SQL

  4. Oracle Insert-fråga i lagrad procedur fungerar inte när den anropas från kod bakom