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

スケジュールされたアイテムを選択するときのPostgresでのDSTのアカウンティング

    timestamp with time zoneを使用する (timestamptz )計算用。
    アラームの時間はtime [without time zone]にすることができます。 。
    ただし、タイムゾーンを保存する必要があります すべての行に対して明示的に。

    決して time with time zoneを使用する これは論理的に壊れたタイプであり、PostgreSQLでは使用をお勧めしません。 マニュアル:

    デモのセットアップ:

    CREATE TABLE alarm(name text, t time, tz text);
    INSERT INTO alarm VALUES
      ('Alfred', '04:00', 'Europe/Stockholm') -- Alfred sets an alarm for 4 AM.
    , ('Lotta',  '05:00', 'Europe/Stockholm') -- Lotta sets an alarm for 5 AM. 
    , ('Sharon', '11:00', 'Asia/Singapore');  -- Sharon has set an alarm for 11 AM.
    

    タイムゾーンの名前である必要があります (略語ではありません)DSTを説明します。関連:

    「今日」に一致するアラームを取得する:

    SELECT *
    FROM   alarm
    WHERE  (('2012-07-01'::date + t) AT TIME ZONE tz AT TIME ZONE 'UTC')::time
           = '03:00'::time
    • ('2012-7-1'::date + t) ... timestamp [without time zone]をアセンブルします now()::date + tにすることもできます 「今日」のために。
    • AT WITH TIME ZONE tz ...タイムスタンプを保存されたタイムゾーンに配置すると、timestamptzになります 。
    • AT WITH TIME ZONE 'UTC' ...UTCtimestampに従って取得
    • ::time ...時間コンポーネントを抽出する最も簡単な方法。

    ここでは、タイムゾーン名> :

    SELECT *
    FROM   pg_timezone_names
    WHERE  name ~~* '%sing%'
    LIMIT  10
    

    SQLフィドル 夏/冬のデモンストレーション。



    1. 日本語の文字を使用したMySQL

    2. MySQLServer8.0リモートデータベース

    3. 最後に挿入された行から値を取得するにはどうすればよいですか?

    4. UPDATEのmysqli_affected_rowsは、完全な行の一致で0を返すことがあります