在PostgreSQL中,如果用空字符串或null替换字符串数组中的白间距字符串,则regexp\u replace行为会改变.


1-将白色间隔字符串替换为blank

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

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

结果:{NULL,"ABC",""}<--尽其所能工作


2-将白色间隔字符串替换为null

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

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

结果:{NULL}<--已删除其他信息

提前感谢您的帮助.

推荐答案

功能严格:

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)

根据the documentation:

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

从逻辑的Angular 来看,函数的这种行为是完全合理的.null是一个特定值.它不能插入字符串、添加到整数、比较等.因此,您将始终得到null.

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

Postgresql相关问答推荐

"错误:无法创建用户:错误:关系\users\违反了非空约束

使用regexp获取表名

如何删除Devtainer之前创建的PostgreSQL数据库?

PL/pgSQL中的IP递增函数

在Postgres中如何连接具有相同名称列的表并更改列名称?

如何在 postgres where 子句中使用 or 对条件进行组合或分组

使用 WHERE 子句创建递归视图

是否可以在 postgres jsonb 列中的列表上创建索引

查找最小值和最大值

postgresql查询中的正则表达式不区分大小写

使用 RPostgreSQL 进行 UTF-8 / Unicode 文本编码

PostgreSQL 在 mySQL 中的 date_trunc

PostgreSQL如何连接间隔值'2天'

IntegrityError:postgres 从转储恢复后,所有具有 ForeignKey 的模型/字段的id列中的空值

在PostgreSQL中 Select 数组列的总和

如何使用 psql 命令列出、创建、使用和判断数据库?

Postgres 日期重叠约束

在 PostgreSQL 中跳过每 n 个结果行

PostgreSQL regexp_replace() 只保留一个空格

如何使用 postgresql 按计数排序?