在 PostgreSQL 中,如果 regexp_replace 將字串陣列中的空白字串替換為空白字串或 null,則其行為會發生變化。
1 - 用空白替換空白字串
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} <-- 洗掉了其他資訊
感謝您提前提供的所有幫助。
uj5u.com熱心網友回復:
函式很嚴格:
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是一個特定的值。它不能插入到字串中、添加到整數、進行比較等。因此,您將始終得到null.
select 'abc' || null, 10 null, 'abc' like null
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/492783.html
標籤:PostgreSQL
