sql >> データベース >  >> RDS >> PostgreSQL

postgresで、タイムスタンプのデフォルトのフォーマットをセッションごとまたはグローバルに設定できますか?

    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
    


    1. sqlalchemyを使用してpostgresqlに接続中にエラーが発生しました

    2. PostgreSQL-結果セットを返すストアドプロシージャに動的SQLを記述します

    3. Pythonでのデータベース接続プールの最良の解決策は何ですか?

    4. Oracle10gタイムゾーンの混乱