Hashing a String to a Numeric Value in PostgreSQL

前端 未结 4 1366
情歌与酒
情歌与酒 2020-12-07 23:16

I need to Convert Strings stored in my Database to a Numeric value. Result can be Integer (preferred) or Bigint. This conversion is to be done at Database side in a PL/pgSQL

4条回答
  •  一个人的身影
    2020-12-07 23:37

    This is an implementation of Java's String.hashCode():

    CREATE OR REPLACE FUNCTION hashCode(_string text) RETURNS INTEGER AS $$
    DECLARE
      val_ CHAR[];
      h_ INTEGER := 0;
      ascii_ INTEGER;
      c_ char;
    BEGIN
      val_ = regexp_split_to_array(_string, '');
    
      FOR i in 1 .. array_length(val_, 1)
      LOOP
        c_ := (val_)[i];
        ascii_ := ascii(c_);
        h_ = 31 * h_ + ascii_;
        raise info '%: % = %', i, c_, h_;
      END LOOP;
    RETURN h_;
    END;
    $$ LANGUAGE plpgsql;
    

提交回复
热议问题