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

PostgreSQLのv1UUIDからタイムスタンプをキャストまたは抽出します

    データベースのuuidを使用してこれをテストしましたが、符号なしのbigintがなくても非常にうまく機能しているようです

    CREATE FUNCTION uuid_timestamp(id uuid) RETURNS timestamptz AS $$
      select TIMESTAMP WITH TIME ZONE 'epoch' +
          (((('x' || lpad(split_part(id::text, '-', 1), 16, '0'))::bit(64)::bigint) +
          (('x' || lpad(split_part(id::text, '-', 2), 16, '0'))::bit(64)::bigint << 32) +
          ((('x' || lpad(split_part(id::text, '-', 3), 16, '0'))::bit(64)::bigint&4095) << 48) - 122192928000000000) / 10000000 ) * INTERVAL '1 second';    
    $$ LANGUAGE SQL
      IMMUTABLE
      RETURNS NULL ON NULL INPUT;
    

    2099年の将来に作成したV1uuid!

    select uuid_timestamp('6d248400-65b7-1243-a57a-14109fec739e');
    uuid_timestamp     
    ------------------------
     2099-08-01 11:30:00-07
    (1 row)
    


    1. HQL / JPAは、日付範囲の間に利用可能なアイテムを検索します

    2. SQL Server、名前付きインスタンスをデフォルトインスタンスに変換しますか?

    3. mysqlはアクセント付き文字を置き換えます

    4. テーブルでデータベース名を指定して、テーブルが存在する場合はドロップできますか?