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

в postgres, можете ли да зададете форматирането по подразбиране за времева марка, по сесия или глобално?

В PostgreSQL форматирането на времевите марки не зависи от съхранението. Един от отговорите е да използвате to_char и форматирайте времевата марка в какъвто и формат, от който се нуждаете в момента, от който се нуждаете, като това:

select to_char(current_timestamp, 'yyyy-MM-dd HH24:MI:SS.MS');

select to_timestamp('2012-10-11 12:13:14.123', 
     'yyyy-MM-dd HH24:MI:SS.MS')::timestamp;

Но ако трябва да зададете форматирането по подразбиране:

Променете глобално формата на postgresql timestamp:

Разгледайте вашата часова зона, изпълнете това като sql заявка:

show timezone
Result: "US/Eastern"

Така че, когато разпечатвате current_timestamp, виждате това:

select current_timestamp
Result: 2012-10-23 20:58:35.422282-04

-04 в края е вашата часова зона спрямо UTC. Можете да промените часовата си зона с:

set timezone = 'US/Pacific'

След това:

select current_timestamp
Result: 2012-10-23 18:00:38.773296-07

Така че забележете -07 там, това означава, че Тихия океан е на 7 часа от UTC. Как да накарам тази грозна часова зона да изчезне? Един от начините е просто да направите таблица, като по подразбиране има времева марка без часова зона:

CREATE TABLE worse_than_fail_table
(
    mykey          INT unique not null,
    fail_date      TIMESTAMP not null
);

След това, ако добавите времеви печат към тази таблица и изберете от нея

select fail_date from worse_than_fail_table
Result: 2012-10-23 21:09:39.335146

да, няма часова зона в края. Но вие искате повече контрол върху това как времевата марка се показва по подразбиране! Можете да направите нещо подобно:

CREATE TABLE moo (
    key     int PRIMARY KEY,
    boo     text NOT NULL DEFAULT TO_CHAR(CURRENT_TIMESTAMP,'YYYYMM')
);

Това е текстово поле, което ви дава повече контрол върху това как се показва по подразбиране, когато направите select somecolumns from sometable . Забележете, че можете да прехвърлите низ към времева марка:

select '2012-10-11 12:13:14.56789'::timestamp
Result: 2012-10-11 12:13:14.56789

Можете да прехвърлите current_timestamp към timestamp което премахва часовата зона:

select current_timestamp::timestamp
Result: 2012-10-23 21:18:05.107047

Можете да се отървете от часовата зона по следния начин:

select current_timestamp at time zone 'UTC'
Result: "2012-10-24 01:40:10.543251"

Но ако наистина искате часовата зона обратно, можете да направите това:

select current_timestamp::timestamp with time zone
Result: 2012-10-23 21:20:21.256478-04

Можете да извадите това, което искате с екстракт:

SELECT EXTRACT(HOUR FROM TIMESTAMP '2001-02-16 20:38:40');
Result: 20

И това чудовище:

SELECT TIMESTAMP WITH TIME ZONE '2001-02-16 20:38:40-05' AT TIME ZONE 'EST';
Result: 2001-02-16 20:38:40


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. 3 начина за форматиране на число като процент в PostgreSQL

  2. Грешка при инсталиране на psycopg2==2.6.2

  3. Топ 5 PostgreSQL инструменти за наблюдение на заявки

  4. Как да групирате по месеци в PostgreSQL

  5. org.postgresql.util.PSQLException:ФАТАЛНО:съжалявам, твърде много клиенти вече