2

我目前正在研究 sql 语句,并对网络中的这个特定练习感到好奇。问题是“如何加密包含两个或多个空格的一行中的每个字母?(不包括空格 ”我在这里创建了一个示例表

         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 回答