本節描述用於檢查和操作字串值的函數和運算子。此處的字串包括 character
、character varying
和 text
類型的值。除非另有說明,否則這些函數和運算子會宣告為接受並傳回 text
類型。它們會交替接受 character varying
引數。character
類型的值會在套用函數或運算子之前轉換為 text
,導致移除 character
值中任何尾隨空格。
SQL定義了一些使用關鍵字而非逗號來分隔引數的字串函數。詳細資訊請參閱表 9.9。PostgreSQL 也提供了這些函數的版本,這些版本使用常規函數呼叫語法 (請參閱 表 9.10)。
字串串聯運算子 (||
) 將接受非字串輸入,只要至少有一個輸入是字串類型,如 表 9.9 所示。對於其他情況,插入明確的 text
強制轉換可用於接受非字串輸入。
表 9.9. SQL字串函數與運算子
函數/運算子 說明 範例 |
---|
串聯兩個字串。
|
將非字串輸入轉換為文字,然後串聯兩個字串。(非字串輸入不能是陣列類型,因為這會與陣列
|
從
|
檢查字串是否為指定的 Unicode 正規化形式。 可選的
|
傳回字串中的位元數 (8 乘以
|
傳回字串中的字元數。
|
根據資料庫的語系規則,將字串轉換為全部小寫。
|
透過在
|
從
|
將字串轉換為指定的 Unicode 正規化形式。 可選的
|
傳回字串中的位元組數。
|
傳回字串中的位元組數。 由於此版本的函式直接接受
|
使用
|
傳回指定的
|
透過在
|
從
|
提取
|
提取符合 POSIX 正則表達式的第一個子字串;請參閱第 9.7.3 節。
|
提取符合SQL正則表達式的第一個子字串; 請參閱第 9.7.2 節。 第一種形式是自 SQL:2003 起指定的; 第二種形式僅在 SQL:1999 中,應視為已過時。
|
從
|
這是
|
如果字串中的所有字元都分配了 Unicode 碼位,則傳回 |
根據資料庫的地區規則,將字串轉換為全部大寫。
|
其他字串操作函數和運算子可用,並列在 表 9.10 中。(其中一些在內部用於實作SQL列在 表 9.9 中的標準字串函數。)還有模式比對運算子,這些運算子在 第 9.7 節 中描述,以及用於全文檢索的運算子,這些運算子在 第 12 章 中描述。
表 9.10. 其他字串函數和運算子
函數/運算子 說明 範例 |
---|
如果第一個字串以第二個字串開頭,則傳回 true (等同於
|
傳回引數的第一個字元的數值代碼。在UTF8編碼中,傳回字元的 Unicode 碼位。在其他多位元組編碼中,引數必須是ASCII字元。
|
傳回具有給定代碼的字元。在UTF8UTF8ASCII編碼中,該引數被視為 Unicode 碼位。在其他多位元組編碼中,該引數必須指定一個 字元。不允許 |
連接所有引數的文字表示形式。NULL 引數會被忽略。 |
連接除第一個引數以外的所有引數,並使用分隔符。第一個引數用作分隔字串,且不應為 NULL。其他 NULL 引數會被忽略。 |
根據格式字串格式化引數;請參閱 第 9.4.1 節。此函數類似於 C 函數 |
將每個單字的第一個字母轉換為大寫,其餘字母轉換為小寫。單字是由非字母數字字元分隔的字母數字字元序列。 |
傳回字串中的前 |
傳回字串中的字元數。 |
計算引數的 MD5 雜湊,結果以十六進位寫入。 |
將 |
傳回目前的用戶端編碼名稱。 |
|
傳回適當地加上引號的給定字串,以便在SQL語法字串中作為字串文字使用。內嵌的單引號和反斜線會正確地重複出現。請注意,
|
將給定的值轉換為文字,然後將其引用為文字。內嵌的單引號和反斜線會正確地重複出現。
|
傳回適當地加上引號的給定字串,以便在SQL語法字串;或者,如果引數為 null,則傳回
|
將給定的值轉換為文字,然後將其引用為文字;或者,如果引數為 null,則傳回
|
傳回 POSIX 正規表示式
|
傳回
|
檢查在
|
傳回在第一次匹配 POSIX 正規表示式
|
傳回在第一次匹配 POSIX 正規表示式
{bar} {baz} |
取代第一次匹配 POSIX 正規表示式
|
取代字串中第
|
使用 POSIX 正規表示式作為分隔符號分割
|
使用 POSIX 正規表示式作為分隔符號分割
hello world |
傳回
|
重複
|
將
|
反轉字串中字元的順序。
|
傳回字串中最後
|
在
|
如果
|
在
|
在
xx NULL zz |
傳回指定的
|
提取
|
將
|
將數字轉換為其等效的二補數二進位表示形式。
|
將數字轉換為其等效的二補數十六進位表示形式。
|
將數字轉換為其等效的二補數八進位表示形式。
|
將
|
評估參數中逸出的 Unicode 字元。 Unicode 字元可以指定為 如果伺服器編碼不是 UTF-8,則由這些逸出序列之一識別的 Unicode 代碼點將轉換為實際的伺服器編碼; 如果這不可能,則會報告錯誤。 此函數提供了一種(非標準)替代方案,用於帶有 Unicode 逸出的字串常數(請參閱 第 4.1.2.3 節)。
|
concat
、concat_ws
和 format
函數是可變參數的,因此可以將要連接或格式化的值作為帶有 VARIADIC
關鍵字的陣列傳遞(請參閱 第 36.5.6 節)。 陣列的元素被視為函數的單獨普通參數。 如果可變參數陣列參數為 NULL,則 concat
和 concat_ws
傳回 NULL,但 format
將 NULL 視為零元素陣列。
另請參閱 第 9.21 節中的聚合函數 string_agg
,以及 表 9.13 中用於在字串和 bytea
類型之間轉換的函數。
format
#函數 format
產生根據格式字串格式化的輸出,其樣式類似於 C 函數 sprintf
。
format
(formatstr
text
[,formatarg
"any"
[, ...] ])
formatstr
是一個格式字串,用於指定結果應該如何格式化。格式字串中的文字會直接複製到結果中,除非遇到格式指定符。 格式指定符在字串中充當佔位符,定義後續的函數引數應如何格式化並插入到結果中。每個 formatarg
引數會根據其資料類型的常用輸出規則轉換為文字,然後根據格式指定符進行格式化並插入到結果字串中。
格式指定符以 %
字元開頭,並具有以下形式:
%[position
][flags
][width
]type
其中各個欄位為:
position
(可選)一個
形式的字串,其中 n
$n
是要列印的引數的索引。索引 1 表示 formatstr
之後的第一個引數。如果省略 position
,則預設為使用序列中的下一個引數。
flags
(可選)控制格式指定符輸出格式的其他選項。 目前唯一支援的旗標是減號(-
),它會使格式指定符的輸出靠左對齊。 除非同時指定了 width
欄位,否則此旗標無效。
width
(可選)指定用於顯示格式指定符輸出的最小字元數。 輸出會在左側或右側(取決於 -
旗標)填充空格,以達到所需的寬度。 過小的寬度不會導致輸出被截斷,而是會被忽略。 寬度可以使用以下任何一種方式指定:正整數、星號(*
)以使用下一個函數引數作為寬度,或 *
形式的字串以使用第 n
$n
個函數引數作為寬度。
如果寬度來自函數引數,則該引數會在用於格式指定符值的引數之前被消耗。 如果寬度引數為負數,則結果會在長度為 abs
(width
) 的欄位中靠左對齊(如同指定了 -
旗標)。
type
(必填)用於產生格式指定符輸出的格式轉換類型。 支援以下類型:
s
將引數值格式化為簡單字串。 空值被視為空字串。
I
將引數值視為 SQL 識別符,必要時用雙引號括起來。 值為空值是錯誤的(相當於 quote_ident
)。
L
將引數值引用為 SQL 常值。 空值顯示為字串 NULL
,不帶引號(相當於 quote_nullable
)。
除了上述格式指定符之外,特殊序列 %%
可用於輸出常值 %
字元。
以下是一些基本格式轉換的範例:
SELECT format('Hello %s', 'World'); Result:Hello World
SELECT format('Testing %s, %s, %s, %%', 'one', 'two', 'three'); Result:Testing one, two, three, %
SELECT format('INSERT INTO %I VALUES(%L)', 'Foo bar', E'O\'Reilly'); Result:INSERT INTO "Foo bar" VALUES('O''Reilly')
SELECT format('INSERT INTO %I VALUES(%L)', 'locations', 'C:\Program Files'); Result:INSERT INTO locations VALUES('C:\Program Files')
以下是使用 width
欄位和 -
旗標的範例:
SELECT format('|%10s|', 'foo'); Result:| foo|
SELECT format('|%-10s|', 'foo'); Result:|foo |
SELECT format('|%*s|', 10, 'foo'); Result:| foo|
SELECT format('|%*s|', -10, 'foo'); Result:|foo |
SELECT format('|%-*s|', 10, 'foo'); Result:|foo |
SELECT format('|%-*s|', -10, 'foo'); Result:|foo |
這些範例展示了 position
欄位的使用:
SELECT format('Testing %3$s, %2$s, %1$s', 'one', 'two', 'three'); Result:Testing three, two, one
SELECT format('|%*2$s|', 'foo', 10, 'bar'); Result:| bar|
SELECT format('|%1$*2$s|', 'foo', 10, 'bar'); Result:| foo|
與標準 C 函數 sprintf
不同,PostgreSQL 的 format
函數允許在同一個格式字串中混合使用帶有和不帶有 position
欄位的格式指定符。 沒有 position
欄位的格式指定符始終使用消耗的最後一個引數之後的下一個引數。 此外,format
函數不要求所有函數引數都必須在格式字串中使用。 例如:
SELECT format('Testing %3$s, %2$s, %s', 'one', 'two', 'three');
Result: Testing three, two, three
%I
和 %L
格式指定符對於安全地建構動態 SQL 語句特別有用。 請參閱 範例 41.1。
如果您在文件中發現任何不正確、與您使用特定功能的經驗不符或需要進一步澄清的地方,請使用此表格報告文件問題。