sql >> Databasteknik >  >> RDS >> PostgreSQL

i postgres, kan du ställa in standardformateringen för en tidsstämpel, efter session eller globalt?

I PostgreSQL är formateringen av tidsstämplar oberoende av lagring. Ett svar är att använda to_char och formatera tidsstämpeln till det format du behöver i det ögonblick du behöver den, så här:

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;

Men om du måste ställa in standardformateringen:

Ändra postgresql-tidsstämpelformatet globalt:

Ta en titt på din tidszon, kör detta som en sql-fråga:

show timezone
Result: "US/Eastern"

Så när du skriver ut aktuell_tidsstämpel ser du detta:

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

-04 i slutet är din tidszon i förhållande till UTC. Du kan ändra din tidszon med:

set timezone = 'US/Pacific'

Sedan:

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

Så lägg märke till -07 där betyder det att vi Stilla havet är 7 timmar bort från UTC. Hur får jag den fula tidszonen att försvinna? Ett sätt är bara att skapa en tabell, den har som standard en tidsstämpel utan tidszon:

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

Sedan om du lägger till en tidsstämpel i den tabellen och väljer från den

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

japp, ingen tidszon på slutet. Men du vill ha mer kontroll över hur tidsstämpeln visas som standard! Du kan göra något så här:

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

Det är ett textfält som ger dig mer kontroll över hur det visas som standard när du gör en select somecolumns from sometable . Observera att du kan casta en sträng till tidsstämpel:

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

Du kan casta en aktuell_tidsstämpel till timestamp som tar bort tidszonen:

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

Du kan bli av med tidszonen så här:

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

Men om du verkligen vill ha tillbaka tidszonen kan du göra detta:

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

Du kan dra ut vad du vill med extrakt:

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

Och denna monstrositet:

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


  1. Hur man distribuerar PostgreSQL för hög tillgänglighet

  2. LOCALTIME Exempel – MySQL

  3. Entity Framework Code Först med SQL Server-synonymer

  4. Att iterera en ResultSet med JDBC för Oracle tar mycket tid, ungefär 16 sekunder?