PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Wartość przesunięcia strefy czasowej serwera

W przypadku strefy czasowej możesz:

SHOW timezone;

lub odpowiednik:

SELECT current_setting('TIMEZONE');

ale może to być dowolny format akceptowany przez serwer, więc może zwrócić UTC , 08:00 , Australia/Victoria lub podobne.

Co frustrujące, wydaje się, że nie ma wbudowanej funkcji do raportowania przesunięcia czasu względem UTC, którego używa klient, w godzinach i minutach, co wydaje mi się trochę szalone. Możesz uzyskać przesunięcie, porównując bieżący czas w UTC z bieżącym czasem lokalnie:

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

... ale IMO lepiej jest wyodrębnić przesunięcie tz w sekundach z current_timestamp i przekonwertuj na interwał:

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

To będzie pasować do pożądanego wyniku, z wyjątkiem tego, że nie da wiodącego zera, więc -05:00 jest tylko -5:00 . Irytujące wydaje się, że niemożliwe jest uzyskanie to_char aby utworzyć wiodące zero dla godzin, zostawiając mnie z następującym brzydkim formatowaniem ręcznym:

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;

Kredyt dla Glenna za timezone_hour i timezone_minute zamiast hacka, którego użyłem wcześniej z extract(timezone from current_timestamp) * INTERVAL '1' second) i CTE.

Jeśli nie potrzebujesz wiodącego zera, możesz zamiast tego użyć:

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;

Zobacz też:



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Wyodrębnij dzień tygodnia z pola daty w PostgreSQL, zakładając, że tygodnie zaczynają się w poniedziałek

  2. Strojenie wydajności Railsów na potrzeby produkcji?

  3. O wydajności pglogicznej

  4. Sprawdzanie PL/pgSQL, czy wiersz istnieje

  5. Nie rozumiem, jak działa nextval() postgresql, czy ktoś mógłby to wyjaśnić?