sql >> Databasteknik >  >> RDS >> Oracle

3 sätt att returnera tidszonen från ett Datetime-värde i Oracle

Nedan finns tre sätt att returnera tidszonsinformation från ett datetime-värde i Oracle Database.

EXTRACT() Funktion

EXTRACT(datetime) Funktionen används för att extrahera olika datetime-delar från ett datetime-värde. Detta inkluderar tidszonsinformationen.

Här är ett exempel:

SELECT EXTRACT(
TIMEZONE_REGION FROM TIMESTAMP '2035-09-26 10:30:45 Australia/Darwin'
)
FROM DUAL;

Resultat:

Australia/Darwin

I det här fallet använde jag TIMEZONE_REGION argument för att extrahera tidszonsregionen.

De tillgängliga argumenten för att extrahera olika tidszonsinformation är:

  • TIMEZONE_HOUR
  • TIMEZONE_MINUTE
  • TIMEZONE_REGION
  • TIMEZONE_ABBR

Det är också möjligt att använda en TIMEZONE_OFFSET argument, även om detta inte visas i Oracles dokumenterade syntax för denna funktion.

Här är ett exempel på hur man skaffar tidszonens förkortning:

SELECT 
    EXTRACT(TIMEZONE_ABBR FROM TIMESTAMP '2035-09-26 10:30:45 Australia/Darwin')
FROM DUAL;

Resultat:

ACST

Observera att när du använder ovanstående tidszonsargument måste datetime-värdet evalueras till ett uttryck av datatypen TIMESTAMP WITH TIME ZONE eller TIMESTAMP WITH LOCAL TIME ZONE .

EXTRACT() funktionen accepterar även argument för andra datetime-delar, såsom YEAR , MONTH , HOUR , etc.

TO_CHAR(datetime) Funktion

Vi kan också använda TO_CHAR(datetime) fungera som en alternativ metod för att hämta tidszonsinformation från ett datum och tid.

Den här funktionen accepterar datetime- eller intervallvärdet som dess första argument och en formatmodell som dess andra argument. Funktionen konverterar sedan värdet till en datatyp VARCHAR2 i det angivna formatet.

Formatmodellen anger formatet som datum/intervallvärdet ska returneras för. Formatmodellen består av ett eller flera formatelement. Detta gör det möjligt för oss att noggrant utforma resultaten för att återspegla vårt önskade format.

Om vi ​​bara vill returnera tidszonsinformation kan vi använda ett av formatelementen för det specifika ändamålet.

Det finns några olika formatelement som vi kan använda när vi returnerar tidszonsinformation från ett datetime-värde.

Låt oss börja med TZR formatelement:

SELECT TO_CHAR(
    TIMESTAMP '2035-09-26 10:30:45 Australia/Darwin', 
    'TZR'
    )
FROM DUAL;

Resultat:

AUSTRALIA/DARWIN

Detta formatelement returnerar tidszonsregionen. Om datetime-värdet bara inkluderar tidszonförskjutningen, returneras det istället.

TZD formatelement kan användas för att returnera information om sommartid. Den returnerar tidszonsinformationen i en förkortad form.

Exempel:

SELECT TO_CHAR(
    TIMESTAMP '2035-09-26 10:30:45 Australia/Darwin', 
    'TZD'
    )
FROM DUAL;

Resultat:

ACST

Alternativt kan vi använda TZH och TZM formatera element för att returnera tidszonens timmar och minuter, baserat på tidszonsförskjutningen.

SELECT TO_CHAR(
    TIMESTAMP '2035-09-26 10:30:45 Australia/Darwin', 
    'TZH:TZM'
    )
FROM DUAL;

Resultat:

+09:30

TZ_OFFSET() Funktion

TZ_OFFSET() funktion returnerar tidszonsförskjutningen som motsvarar argumentet baserat på datumet då satsen exekveras.

Här är ett exempel på hur du använder TZ_OFFSET() för att returnera tidszonsförskjutningen baserat på tidszonsregionen som returneras av EXTRACT() funktion:

SELECT TZ_OFFSET(
    EXTRACT(TIMEZONE_REGION FROM TIMESTAMP '2035-09-26 10:30:45 Australia/Darwin')
)
FROM DUAL;

Resultat:

+09:30

Vi kan också skicka SESSIONTIMEZONE eller DBTIMEZONE till TZ_OFFSET() för att returnera tidszonen för vår nuvarande session respektive databas:

SELECT 
    TZ_OFFSET(SESSIONTIMEZONE) AS "Session",
    TZ_OFFSET(DBTIMEZONE) AS "DB"
FROM DUAL;

Resultat:

   Session        DB 
__________ _________ 
+10:00     +00:00    

  1. TIMEDIFF() vs SUBTIME() i MySQL:Vad är skillnaden?

  2. Vad är SQL-operatörer och hur fungerar de?

  3. 5 mycket vanliga SQL-frågor design misstag att undvika till varje pris

  4. MySQL lista alla procedurer