PostgreSQLでは、タイムスタンプのフォーマットはストレージに依存しません。 1つの答えは、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タイムスタンプ形式をグローバルに変更します:
タイムゾーンを確認し、これを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
に注意してください つまり、太平洋はUTCから7時間離れているということです。その見苦しいタイムゾーンをなくすにはどうすればよいですか? 1つの方法は、テーブルを作成することです。デフォルトでは、タイムゾーンのないタイムスタンプになります。
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