sql >> Database teknologi >  >> RDS >> PostgreSQL

Server tidszone offset værdi

For tidszonen kan du:

SHOW timezone;

eller tilsvarende:

SELECT current_setting('TIMEZONE');

men dette kan være i ethvert format, der accepteres af serveren, så det kan returnere UTC , 08:00 , Australia/Victoria , eller lignende.

Frustrerende nok ser det ud til, at der ikke er nogen indbygget funktion til at rapportere tidsforskydningen fra UTC, som klienten bruger i timer og minutter, hvilket forekommer mig noget sindssygt. Du kan få offset ved at sammenligne den aktuelle tid i UTC med den aktuelle tid lokalt:

SELECT age(current_timestamp AT TIME ZONE 'UTC', current_timestamp)`

... men IMO er det renere at udtrække tz offset på sekunder fra current_timestamp og konverter til et interval:

SELECT to_char(extract(timezone from current_timestamp) * INTERVAL '1' second, 'FMHH24:MM');

Det vil matche det ønskede resultat, bortset fra at det ikke giver et indledende nul, så -05:00 er kun -5:00 . Irriterende nok ser det ud til at være umuligt at få to_char at producere et førende nul i timevis, hvilket efterlader mig med følgende grimme manuelle formatering:

CREATE OR REPLACE FUNCTION oracle_style_tz() RETURNS text AS $$
SELECT to_char(extract(timezone_hour FROM current_timestamp),'FM00')||':'||
       to_char(extract(timezone_minute FROM current_timestamp),'FM00');
$$ LANGUAGE 'SQL' STABLE;

Kredit til Glenn for timezone_hour og timezone_minute i stedet for det hack, jeg brugte tidligere med extract(timezone from current_timestamp) * INTERVAL '1' second) og en CTE.

Hvis du ikke har brug for det indledende nul, kan du i stedet bruge:

CREATE OR REPLACE FUNCTION oracle_style_tz() RETURNS text AS $$
SELECT to_char(extract(timezone from current_timestamp) * INTERVAL '1' second, 'FMHH24:MM');
$$ LANGUAGE 'SQL' STABLE;

Se også:



  1. Udfør rå forespørgsel i migration - Sequelize 3.30

  2. Codeigniter - Adgangsmodeller og database om routing

  3. Hvordan finder man ud af, hvornår en bestemt tabel blev oprettet i Oracle?

  4. Brug af IF ELSE-sætning baseret på Count til at udføre forskellige Insert-sætninger