PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Стойност на отместването на часовата зона на сървъра

За часовата зона можете:

SHOW timezone;

или еквивалент:

SELECT current_setting('TIMEZONE');

но това може да бъде във всеки формат, приет от сървъра, така че може да върне UTC , 08:00 , Australia/Victoria , или подобни.

Разочароващо, изглежда, че няма вградена функция за отчитане на отместването на времето от UTC, което клиентът използва в часове и минути, което ми се струва някак безумно. Можете да получите отместването, като сравните текущото време в UTC с текущото време на място:

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

... но IMO е по-чисто да се извлече tz отместването за секунди от current_timestamp и преобразувайте в интервал:

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

Това ще съответства на желания резултат, с изключение на това, че не дава водеща нула, така че -05:00 е само -5:00 . Досадно е, че изглежда невъзможно да се стигне до to_char да произвежда водеща нула с часове, оставяйки ме със следното грозно ръчно форматиране:

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;

Кредит към Глен за timezone_hour и timezone_minute вместо хака, който използвах по-рано с extract(timezone from current_timestamp) * INTERVAL '1' second) и CTE.

Ако не се нуждаете от водещата нула, можете вместо това да използвате:

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;

Вижте също:



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Rails/postgres, „чужди ключове“, съхранени в масив за създаване на асоциация 1-много

  2. pgAdmin3 проблеми с връзката

  3. Добавете часове към времева стойност в PostgreSQL

  4. търсене на дубликати на кръстосани полета в postgresql

  5. Съставният ПЪРВИЧЕН КЛЮЧ налага ограничения NOT NULL върху участващите колони