sql >> Database teknologi >  >> RDS >> Oracle

3 måder at returnere tidszonen fra en DateTime-værdi i Oracle

Nedenfor er tre måder, hvorpå du kan returnere tidszoneoplysninger fra en datetime-værdi i Oracle Database.

EXTRACT() Funktion

EXTRACT(datetime) funktion bruges til at udtrække forskellige datetime dele fra en datetime værdi. Dette inkluderer tidszoneoplysningerne.

Her er et eksempel:

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

Resultat:

Australia/Darwin

I dette tilfælde brugte jeg TIMEZONE_REGION argument for at udtrække tidszoneområdet.

De tilgængelige argumenter for at udtrække forskellige tidszoneoplysninger er:

  • TIMEZONE_HOUR
  • TIMEZONE_MINUTE
  • TIMEZONE_REGION
  • TIMEZONE_ABBR

Det er også muligt at bruge en TIMEZONE_OFFSET argument, selvom dette ikke vises i Oracles dokumenterede syntaks for denne funktion.

Her er et eksempel på at få tidszoneforkortelsen:

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

Resultat:

ACST

Bemærk, at når du bruger ovenstående tidszoneargumenter, skal datetime-værdien evalueres til et udtryk af datatypen TIMESTAMP WITH TIME ZONE eller TIMESTAMP WITH LOCAL TIME ZONE .

EXTRACT() funktion accepterer også argumenter for andre datetime dele, såsom YEAR , MONTH , HOUR osv.

TO_CHAR(datetime) Funktion

Vi kan også bruge TO_CHAR(datetime) fungere som en alternativ metode til at få tidszoneoplysninger fra en datetime-værdi.

Denne funktion accepterer datetime eller intervalværdien som sit første argument og en formatmodel som sit andet argument. Funktionen konverterer derefter værdien til en datatype VARCHAR2 i det angivne format.

Formatmodellen angiver det format, som dato/intervalværdien skal returneres for. Formatmodellen består af et eller flere formatelementer. Dette gør os i stand til omhyggeligt at udforme resultaterne, så de afspejler vores ønskede format.

Hvis vi kun ønsker at returnere tidszoneoplysninger, kan vi bruge et af formatelementerne til det specifikke formål.

Der er et par forskellige formatelementer, som vi kan bruge, når vi returnerer tidszoneoplysninger fra en datetime-værdi.

Lad os starte med TZR formatelement:

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

Resultat:

AUSTRALIA/DARWIN

Dette formatelement returnerer tidszoneområdet. Hvis datetime-værdien kun inkluderer tidszoneforskydningen, returneres det i stedet.

TZD formatelement kan bruges til at returnere sommertid. Det returnerer tidszoneoplysningerne i en forkortet form.

Eksempel:

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

Resultat:

ACST

Alternativt kan vi bruge TZH og TZM formater elementer for at returnere tidszonens timer og minutter, baseret på tidszoneforskydningen.

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 returnerer den tidszoneforskydning, der svarer til argumentet baseret på den dato, sætningen udføres.

Her er et eksempel på brug af TZ_OFFSET() for at returnere tidszoneforskydningen baseret på tidszoneregionen returneret af 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 også sende SESSIONTIMEZONE eller DBTIMEZONE til TZ_OFFSET() for at returnere tidszonen for henholdsvis vores aktuelle session og database:

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

Resultat:

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

  1. Hvordan man erklærer og viser en variabel i Oracle

  2. MySQL 1062 - Dublet indtastning '0' for nøglen 'PRIMÆR'

  3. Hvordan kan jeg logge og finde de dyreste forespørgsler?

  4. Kan et tabelfelt indeholde en bindestreg?