在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