本節描述用於檢查和操作字串值的函式和運算子。此處的字串包括 character
、character varying
和 text
型別的值。除非另有說明,這些函式和運算子宣告為接受並返回 text
型別。它們可以互換地接受 character varying
引數。型別為 character
的值在函式或運算子應用之前會轉換為 text
,這將導致 character
值中所有尾隨空格被去除。
SQL定義了一些使用關鍵字而不是逗號來分隔引數的字串函式。詳情請參見表 9.9。PostgreSQL 還提供了使用常規函式呼叫語法(參見表 9.10)的這些函式的版本。
字串連線運算子 (||
) 將接受非字串輸入,只要至少有一個輸入是字串型別,如表 9.9所示。對於其他情況,插入顯式強制轉換為 text
可用於接受非字串輸入。
表 9.9. SQL字串函式和運算子
函式/運算子 描述 示例 |
---|
連線兩個字串。
|
將非字串輸入轉換為文字,然後連線兩個字串。(非字串輸入不能是陣列型別,因為那會與陣列
|
從
|
檢查字串是否處於指定的 Unicode 規範化形式。可選的
|
返回字串中的位數(
|
返回字串中的字元數。
|
根據資料庫區域設定的規則將字串轉換為小寫。
|
透過在
|
從
|
將字串轉換為指定的 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字元。
|
返回具有給定程式碼的字元。在UTF8編碼中,引數被視為 Unicode 程式碼點。在其他多位元組編碼中,引數必須指定一個ASCII字元。
|
連線所有引數的文字表示。NULL 引數將被忽略。
|
連線除第一個引數外的所有引數,並使用分隔符。第一個引數用作分隔字串,不應為 NULL。其他 NULL 引數將被忽略。
|
根據格式字串格式化引數;參見第 9.4.1 節。此函式類似於 C 函式
|
將每個單詞的首字母轉換為大寫,其餘轉換為小寫。單詞是字母數字字元序列,由非字母數字字元分隔。
|
根據排序規則對輸入字串執行大小寫摺疊。大小寫摺疊類似於大小寫轉換,但大小寫摺疊的目的是方便字串的不區分大小寫匹配,而大小寫轉換的目的是轉換為特定的大小寫形式。此函式只能在伺服器編碼為 通常,大小寫摺疊只是轉換為小寫,但根據排序規則可能會有例外。例如,某些字元有兩個以上的小寫變體,或者摺疊為大寫。 大小寫摺疊可能會改變字串的長度。例如,在
|
返回字串中的前
|
返回字串中的字元數。
|
計算引數的 MD5 雜湊值,結果以十六進位制表示。
|
將
|
返回當前客戶端編碼名稱。
|
返回給定字串,並適當引用,以便在SQL語句字串中用作識別符號。僅在必要時(即,如果字串包含非識別符號字元或將被大小寫摺疊)才新增引號。嵌入的引號會正確地加倍。另請參見示例 41.1。
|
返回給定字串,並適當引用,以便在SQL語句字串中用作字串文字。嵌入的單引號和反斜槓會正確地加倍。請注意,
|
將給定值轉換為文字,然後將其作為文字引用。嵌入的單引號和反斜槓會正確地加倍。
|
返回給定字串,並適當引用,以便在SQL語句字串;或者,如果引數為空,則返回
|
將給定值轉換為文字,然後將其作為文字引用;或者,如果引數為空,則返回
|
返回 POSIX 正則表示式
|
返回 POSIX 正則表示式
|
檢查 POSIX 正則表示式
|
返回與 POSIX 正則表示式
|
返回 POSIX 正則表示式
{bar} {baz} |
替換與 POSIX 正則表示式
|
替換與 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
將引數值格式化為簡單字串。NULL 值被視為空字串。
I
將引數值視為 SQL 識別符號,必要時加雙引號。值為 NULL 是一個錯誤(等同於 quote_ident
)。
L
將引數值作為 SQL 文字引用。NULL 值顯示為字串 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。
如果您在文件中發現任何不正確、與您使用特定功能的經驗不符或需要進一步澄清的內容,請使用此表單報告文件問題。