如何在给定字符串中获取多个匹配的关键字。 请找到以下查询。
SELECT regexp_matches(UPPER('bakerybaking'),'BAKERY|BAKING');
输出:" {BAKERY}"
给定字符串的上述场景与两个关键字匹配。 当我执行上述查询时,只获取一个关键字。 如何获得其他匹配关键字。
答案 0 :(得分:2)
g
是在 regex
中使用的全局搜索标记。我过去常常使用匹配的字符串
select regexp_matches(UPPER('bakerybaking'),'BAKERY|BAKING','g')
regexp_matches
text[]
--------------
{BAKERY}
{BAKING}
将结果作为单行获取:
SELECT ARRAY(select array_to_string(regexp_matches(UPPER('bakerybaking'),'BAKERY|BAKING','g'),''));
array
text[]
---------------
{BAKERY,BAKING}
使用unnest
- 转换返回表格的数组
select unnest(regexp_matches(UPPER('bakerybaking'),'BAKERY|BAKING','g'))
unnest
text
------
BAKERY
BAKING
答案 1 :(得分:0)
根据:http://www.postgresql.org/docs/9.5/static/functions-string.html
SELECT regexp_matches(UPPER('bakerybaking'),'(BAKERY)(BAKING)');
Otput :)
regexp_matches ----------------- {BAKERY,BAKING}(1行)
答案 2 :(得分:0)
哦,人类。请谢谢我。
--https://stackoverflow.com/questions/52178844/get-second-match-from-regexp-matches-results
--https://stackoverflow.com/questions/24274394/postgresql-8-2-how-to-get-a-string-representation-of-any-array
CREATE OR REPLACE FUNCTION aaa(anyarray,Integer, text)
RETURNS SETOF text
LANGUAGE plpgsql
AS $function$
DECLARE s $1%type;
BEGIN
FOREACH s SLICE 1 IN ARRAY $1[$2:$2] LOOP
RETURN NEXT array_to_string(s,$3);
END LOOP;
RETURN;
END;
$function$;
--SELECT aaa((ARRAY(SELECT unnest(regexp_matches('=If(If(E_Reports_@ >=1, DMT(E_Date_R1_@, DateShift),0)', '(\w+_@)|([0-9]+)','g'))::TEXT)),1,',')
--select (array[1,2,3,4,5,6])[2:5];
SELECT aaa(array_remove(Array(SELECT unnest(regexp_matches('=If(If(E_Reports_@ >=1, DMT(E_Date_R1_@, DateShift),0)', '(\w+_@)|([0-9]+)','g'))::TEXT), Null),3,',')