sql >> Database teknologi >  >> RDS >> PostgreSQL

i postgres, kan du indstille standardformateringen for et tidsstempel, efter session eller globalt?

I PostgreSQL er formateringen af ​​tidsstempler uafhængig af lagring. Et svar er at bruge to_char og formater tidsstemplet til det format, du har brug for i det øjeblik, du har brug for det, sådan her:

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 hvis du skal indstille standardformateringen:

Skift postgresql-tidsstempelformatet globalt:

Tag et kig på din tidszone, kør dette som en sql-forespørgsel:

show timezone
Result: "US/Eastern"

Så når du udskriver aktuelle_tidsstempel, ser du dette:

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

-04 i slutningen er din tidszone i forhold til UTC. Du kan ændre din tidszone med:

set timezone = 'US/Pacific'

Derefter:

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

Så læg mærke til -07 der betyder det, at vi Pacific er 7 timer væk fra UTC. Hvordan får jeg den grimme tidszone til at forsvinde? En måde er bare at lave en tabel, den har som standard et tidsstempel uden tidszone:

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

Så hvis du tilføjer et tidsstempel til den tabel og vælger fra den

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

yay, ingen tidszone i slutningen. Men du vil have mere kontrol over, hvordan tidsstemplet vises som standard! Du kunne gøre noget som dette:

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

Det er et tekstfelt, som giver dig mere kontrol over, hvordan det vises som standard, når du select somecolumns from sometable . Bemærk, at du kan caste en streng til tidsstempel:

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

Du kan caste et aktuelt_tidsstempel til timestamp som fjerner tidszonen:

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

Du kan slippe af med tidszonen sådan her:

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

Men hvis du virkelig vil have tidszonen tilbage, kan du gøre dette:

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

Du kan trække ud, hvad du vil med ekstrakt:

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

Og denne monstrøsitet:

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


  1. Hvordan skriver man UTF-8-tegn ved hjælp af bulkinsert i SQL Server?

  2. Sådan parses JSON i postgresql

  3. Cloud Vendor Deep-Dive:PostgreSQL på Microsoft Azure

  4. Overførsel af parametre til en JDBC PreparedStatement