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

Czy w Postgresie możesz ustawić domyślne formatowanie znacznika czasu, według sesji czy globalnie?

W PostgreSQL formatowanie znaczników czasu jest niezależne od przechowywania. Jedną z odpowiedzi jest użycie to_char i sformatuj sygnaturę czasową w dowolnym formacie, w jakim jest to potrzebne, w ten sposób:

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;

Ale jeśli musisz ustawić domyślne formatowanie:

Zmień globalnie format znacznika czasu postgresql:

Spójrz na swoją strefę czasową, uruchom to jako zapytanie sql:

show timezone
Result: "US/Eastern"

Więc kiedy drukujesz current_timestamp, widzisz to:

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

-04 na końcu jest Twoja strefa czasowa względem UTC. Strefę czasową możesz zmienić za pomocą:

set timezone = 'US/Pacific'

Następnie:

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

Zwróć więc uwagę na -07 tam, oznacza to, że na Pacyfiku jesteśmy 7 godzin drogi od UTC. Jak usunąć tę brzydką strefę czasową? Jednym ze sposobów jest po prostu utworzenie tabeli, domyślnie jest to znacznik czasu bez strefy czasowej:

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

Następnie, jeśli dodasz znacznik czasu do tej tabeli i wybierzesz z niego

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

tak, na końcu nie ma strefy czasowej. Ale chcesz mieć większą kontrolę nad tym, jak domyślnie wyświetla się znacznik czasu! Możesz zrobić coś takiego:

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

Jest to pole tekstowe, które daje większą kontrolę nad tym, jak domyślnie się wyświetla, gdy select somecolumns from sometable . Zauważ, że możesz rzutować ciąg na znacznik czasu:

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

Możesz rzutować current_timestamp na timestamp co usuwa strefę czasową:

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

Możesz pozbyć się strefy czasowej w ten sposób:

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

Ale jeśli naprawdę chcesz przywrócić strefę czasową, możesz to zrobić:

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

Możesz wyszarpnąć, co chcesz, za pomocą ekstraktu:

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

I ta potworność:

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. Wyświetlaj wybrane wyniki pionowo w psql, tak jak robi to MySQL \G

  2. Django unikalne razem awaria ograniczenia?

  3. Znajdź wiersze, w których tablica tekstowa zawiera wartość podobną do input

  4. Rozmiar tablicy partycji w PostgreSQL 9.0

  5. Początkowa tablica w funkcji agregacji tablicy wielowymiarowej