2

私は現在SQLステートメントを勉強しており、ネットでこの特定の演習に興味を持っています. 問題は「2つ以上のスペースを含む行のすべての文字を暗号化するにはどうすればよいですか?(スペースは含まれません)」私はここにサンプルテーブルを作成しました

         sample
-----------------------
first
first second
first second third
first second third fourth

これが私が取得したいものです:

         sample
-----------------------
first
first second
first ****** *****
first ****** ***** fourth

これは私がこれまでに試したことです:

select name, substring(name, E'(\\s\\w+\\s.*)') from sample ;
4

1 に答える 1

1

単純な選択でそれを行うには複雑すぎるため、豊富な PostgreSQL 文字列関数で関数を使用しました。

CREATE OR REPLACE FUNCTION hide_middle(s varchar)
    RETURNS varchar AS
$BODY$
DECLARE
    r varchar;
    arr  varchar[];
BEGIN
    r := s;
    arr := regexp_matches(s, '^(\\S+ )(.*)( \\S+)$');
    IF array_length(arr, 1) = 3 THEN
        r := arr[1] || regexp_replace(arr[2], '\\S', '*', 'g') || arr[3];
    END IF;
    RETURN r;
END;
$BODY$
    LANGUAGE 'plpgsql' VOLATILE;

次のように使用できます。

select hide_middle('first second third fourth')
于 2013-09-26T11:45:33.497 に答える