1. ホーム
  2. データベース
  3. ポストグレスキュー

PostgreSqlのhash_code関数の使用法

2022-01-19 01:59:35

PostgreSql の hash_code 関数の実装は、java の hash_code メソッドと一致しています。

CREATE FUNCTION hash_code(text) RETURNS integer
  LANGUAGE plpgsql
AS
$$
DECLARE
  i integer := 0;
  DECLARE
  h bigint := 0;
BEGIN
  FOR i IN 1..length($1)
    LOOP
      h = (h * 31 + ascii(substring($1, i, 1))) & 4294967295;
    END LOOP;
  RETURN cast(cast(h AS bit(32)) AS int4);
END;
$$;

追加です。PGSQLのいくつかの共通関数

I. COALESCE(col,value)です。

COALESCE関数は、NULL置換関数の役割、つまり、ある列の値が空のとき、他の値に置き換えて、フロントエンドに返すことができる関数です。

例: COALESCE(totalnum,0); つまり、フィールド名 totalnum のカラムの値が空の場合、0に置き換えられる。置き換えられる値は、実際の状況に応じて、数値やvarcharなどの型にすることができる。

II. regexp_split_to_table(col,',');

regexp_split_to_table関数は、正規表現を使って文字列を表に分割するための関数です。指定された列の値を分割するところです。分割されたそれぞれの部分文字列は1つの行に変換され、複数の部分文字列は複数の行に変換されます。下図のように

そこで、上記の機能を考えると、実用的な開発では、例えば、次の画像のように、マルチタイプ、マルチステート、マルチフォーマットの条件付きクエリに使用することができます。

ここで '00,10,11,98' はフロントエンドから渡してラップできる文字列変数で、ループで取り出して "'00','10','11','98'" という形の文字列にラップするよりもずっと便利です。

iii. regexp_split_to_array(col,',');

regexp_split_to_array は,次の図のように,フィールドの値を特定の記号で分割して,配列形式に変換します.

IV. string_agg

式やカラムのフィールドを直接文字列にマージする

書式 - string_ag(式, 区切り文字, 式による順序)

第1引数は、マージするフィールドまたは式を示す。

第2引数は、第1引数をリンクするために使用する記号を示し、通常は','である。

第3引数はオプションで、最初の列のフィールドをマージするためにどのようにソートするかを指定します。

string_agg(f_b_getusername(r.userid),',' order by r.crt_time desc) as mjxms

注:2番目のパラメータと3番目のパラメータを区別するためにコンマは必要ありません。

v. サブストリング(文字列 [from int] [for int])

substring('abcdefg' from 2 for 3) = bcd

第1引数はインターセプトする文字列、第2引数は1から始まるインターセプトする桁数、第3引数はインターセプトする長さである。

VI. 現在の日付がある曜日を取得する

SELECT extract(dow FROM cast(now() as TIMESTAMP))

dowをdayに置き換えて、現在の日付を当月の初日として取得します。

VII. 日付をINTERVAL形式に変換する

select age('2019-10-10','2018-04-19')

2つの日付が何日違うか計算することができる

上記は私の個人的な経験ですが、ご参考にしていただき、スクリプトハウスをもっと応援していただければと思います。もし間違いや検討不足があれば、遠慮なくアドバイスしてください。