9.4. 字串函式及運算子
Last updated
Last updated
本節介紹用於檢查和操作字串值的函數和運算子。此節中的字串包括 character,character varying 和 text 的內容。除非另有說明,否則下面列出的所有函數都適用於所有這些型別,但在使用字串型別時要小心自動填充字元的潛在影響。對於 bit-string 型別,一些函數也可以處理。
SQL 定義了一些字串函數,它們使用關鍵字而不是逗號來分隔參數。詳情見 Table 9.8。PostgreSQL 還提供了一般函數呼叫語法的這些函數的版本(參見 Table 9.9)。
注意 在 PostgreSQL 8.3 之前,由於存在從這些資料型別到文字的強制轉換,這些函數也會默默地接受幾個非字串資料型別的值。但這些強制措施已被刪除,因為它們經常引起令人驚訝的行為。不過,字串連接運算子(||)仍然接受非字串輸入,只要至少有一個輸入是字串型別,如 Table 9.8 所示。對於其他情況,如果需要複製先前的行為,請在語法中加入明確的轉換。
還有其他字串操作函數可用,在 Table 9.9 中列出。 其中一些內部用於實作 SQL 標準的字串函數列在 Table 9.8。
concat,concat_ws 和 format 函數是可變參數,因此可以將值連接或格式化成標記為 VARIADIC 關鍵字的陣列(請參閱第 37.4.5 節)。陣列的元素被視為它們是函數的單獨普通參數。如果 variadic 陣列參數為 NULL,則 concat 和 concat_ws 回傳 NULL,但 format 將 NULL 視為零元素陣列。
另請參閱第 9.20 節中的彙總函數 string_agg。
format
函數格式化輸出根據格式字串的輸出,其格式類似於 C 函數 sprintf。
formatstr 是一個格式字串,指定如何格式化結果。格式字串中的文字將直接複製到結果中,除非使用格式標示符。格式標示符充當字串中的佔位符,定義後續函數參數應如何格式化並插入結果中。每個 formatarg 參數根據其資料型別的一般輸出規則轉換為文字,然後根據格式標示符進行格式化並插入到結果字串中。
格式標示符由 % 字元引入並具有其語法
組件段落的位置:position(選擇性)
形式為 n$ 的字串,其中 n 是要輸入參數的索引。索引 1 表示 formatstr 之後的第一個參數。如果省略該位置,則預設使用 sequence.flags 中的下一個參數(選擇性)
控制格式標示符輸出格式的其他選項。目前唯一支援的標示是減號( - ),這將使格式標示符的輸出向左對齊。除非還指定了 width,否則這沒有效果。(選擇性)
指定用於顯示格式標示符輸出的最小字元數。輸出在左側或右側(取決於 - 標示)填充,並根據需要填充空格以填充寬度。寬度太小不會導致截斷輸出,但會被忽略。可以使用以下任何一種來指定寬度:正整數;星號()使用下一個函數參數作為寬度;或者 n$ 形式的字串,以使用第 n 個函數參數作為寬度。
如果寬度來自函數參數,則該參數在用於格式標示符值的參數之前使用。如果 width 參數為負,則結果在長度為 abs(width).type(必要)的段落內保持對齊(就像指定了 - 標誌一樣)。
用於産生格式標示符輸出的格式轉換型別。支援以下型別:
s
將參數值格式化為簡單字串。空值被視為空字串。
I
將參數值視為 SQL 標示符,必要時對其進行雙引號。值為 null(相當於 quote_ident)是一個錯誤。
L
引用參數值作為 SQL 文字。空值顯示為字串 NULL,不帶引號(相當於 quote_nullable)。
除了上面描述的格式標示符之外,特殊序列 %% 可用於輸出文字 % 字元。
以下是基本格式轉換的一些範例:
以下是使用寬度欄位和 - 標示的範例:
這些範例顯示了 position 欄位的使用:
與標準 C 函數 sprintf 不同,PostgreSQL 的格式函數允許將具有和不具有位置欄位的格式標示符混合在相同的格式字串中。沒有位置欄位的格式標示符始終使用最後一個參數消耗後的下一個參數。此外,format 函數不要求在格式字串中使用所有函數參數。例如:
%I 和 %L 格式標示符對於安全地建構動態 SQL 語句特別有用。詳見範例 42.1。