Regexp_replace行为改变,如果它是替换字符串数组中的字符串与空字符串或null



在PostgreSQL中,regexp_replace行为会改变,如果它将字符串数组中的空白字符串替换为空字符串或null。


1 -用blank替换空白字符串

SELECT regexp_replace(UNNEST('{NULL, "ABC", " "}'::text[]), '^s+$', '', 'g')

预期结果:{"空,"ABC"}

Result: {NULL,"ABC","} <——正常运行


2 -用null替换空白字符串

SELECT regexp_replace(UNNEST('{NULL, "ABC", " "}'::text[]), '^s+$', NULL, 'g')

预期结果:{NULL,"ABC"零}

结果:{零}<——删除其他信息>

提前感谢您的帮助。

函数是严格的:

select pg_get_functiondef('regexp_replace(text, text, text, text)'::regprocedure);
pg_get_functiondef
------------------------------------------------------------------------------
CREATE OR REPLACE FUNCTION pg_catalog.regexp_replace(text, text, text, text)+
RETURNS text                                                               +
LANGUAGE internal                                                          +
IMMUTABLE STRICT                                                           +
AS $function$textregexreplace$function$                                     +
(1 row)

根据文档:

STRICT表示当函数的任何参数为空时,该函数总是返回null。如果指定了此参数,则当参数为空时不执行该函数;相反,会自动假定结果为空。

从逻辑角度来看,函数的这种行为是完全合理的。null为具体数值。不能将其插入字符串、添加到整数、比较等。因此,您将始终获得null

select 'abc' || null, 10+ null, 'abc' like null

最新更新