sql >> Databáze >  >> RDS >> PostgreSQL

Hodnota posunu časového pásma serveru

Pro časové pásmo můžete:

SHOW timezone;

nebo ekvivalent:

SELECT current_setting('TIMEZONE');

ale to může být v jakémkoli formátu akceptovaném serverem, takže může vrátit UTC , 08:00 , Australia/Victoria , nebo podobně.

Frustrující je, že se zdá, že neexistuje žádná vestavěná funkce, která by hlásila časový posun od UTC, který klient používá v hodinách a minutách, což mi připadá trochu šílené. Posun můžete získat porovnáním aktuálního času v UTC s aktuálním místním časem:

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

... ale IMO je čistší extrahovat offset tz v sekundách z current_timestamp a převést na interval:

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

To bude odpovídat požadovanému výsledku kromě toho, že nevytváří úvodní nulu, takže -05:00 je jen -5:00 . Nepříjemně se zdá, že je nemožné dostat to_char produkovat úvodní nulu po celé hodiny, takže mi zůstane následující ošklivé ruční formátování:

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 Glennovi za timezone_hour a timezone_minute místo hacku, který jsem použil dříve s extract(timezone from current_timestamp) * INTERVAL '1' second) a CTE.

Pokud nepotřebujete úvodní nulu, můžete místo toho použít:

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;

Viz také:



  1. Jak automaticky aktualizovat databázi po vypršení relace bez obnovení mé stránky

  2. nástroje pro testování zátěže mysql

  3. Instrumentace:Odesílání org.apache.tomcat.dbcp.dbcp.PoolingDataSource$PoolGuardConnectionWrapper do oracle.jdbc.OracleConnection

  4. příspěvek přejmenoval název souboru z nahrání do databáze