字串函數與運算子

字串運算子

|| 運算子執行串聯。

字串函數

注意

這些函數假設輸入字串包含有效的 UTF-8 編碼 Unicode 碼位。 沒有針對有效的 UTF-8 進行明確檢查,而且函數可能會在無效的 UTF-8 上傳回不正確的結果。 無效的 UTF-8 資料可以使用 from_utf8() 進行更正。

此外,這些函數會在 Unicode 碼位上運作,而不是使用者可見的字元(或字形叢集)。 有些語言會將多個碼位組合成單一使用者感知的字元,這是語言書寫系統的基本單位,但函數會將每個碼位視為單獨的單位。

lower()upper() 函數不會執行某些語言所需的與地區設定相關、與上下文相關或一對多的對應。 具體而言,這會為立陶宛語、土耳其語和亞塞拜然語傳回不正確的結果。

chr(n) -> varchar()

將 Unicode 碼位 n 以單一字元字串傳回。

codepoint(string) -> integer()

傳回 string 的唯一字元的 Unicode 碼位。

concat(string1, ..., stringN) -> varchar()

傳回 string1string2...stringN 的串聯。 此函數提供與 SQL 標準串聯運算子 (||) 相同的功能。

ends_with(string, substring) -> boolean()

傳回 string 是否以 substring 結尾。

hamming_distance(string1, string2) -> bigint()

傳回 string1string2 的漢明距離,即對應字元不同的位置數。 請注意,這兩個字串必須具有相同的長度。

length(string) -> bigint()

以字元傳回 string 的長度。

levenshtein_distance(string1, string2) -> bigint()

傳回 string1string2 的 Levenshtein 編輯距離,也就是將 string1 轉換為 string2 所需的最小單字元編輯次數(插入、刪除或替換)。

lower(string) -> varchar()

string 轉換為小寫。

lpad(string, size, padstring) -> varchar()

使用 padstringstring 的左側填充至 size 個字元。如果 size 小於 string 的長度,結果將被截斷為 size 個字元。size 不得為負數,且 padstring 不得為空。

ltrim(string) -> varchar()

移除 string 前方的空白字元。請參閱 trim() 以取得可識別的空白字元集。

ltrim(string, chars) -> varchar()

string 的開頭移除僅包含 chars 中字元的最長子字串。

SELECT ltrim('test', 't'); -- est
SELECT ltrim('tetris', 'te'); -- ris
replace(string, search) -> varchar()

string 中移除所有 search 的實例。

replace(string, search, replace) -> varchar()

string 中所有 search 的實例替換為 replace

如果 search 是空字串,則在每個字元前和 string 的結尾插入 replace

replace_first(string, search, replace) -> varchar()
``string`` 中第一個 ``search`` 的實例替換為 ``replace``()

如果 search 是空字串,則在 string 的開頭插入 replace

reverse(string) -> varchar()

傳回字元順序反轉的 string

rpad(string, size, padstring) -> varchar()

使用 padstringstring 的右側填充至 size 個字元。如果 size 小於 string 的長度,結果將被截斷為 size 個字元。size 不得為負數,且 padstring 不得為空。

rtrim(string) -> varchar()

移除 string 末端的空白字元。請參閱 trim() 以取得可識別的空白字元集。

rtrim(string, chars) -> varchar()

string 的末尾移除僅包含 chars 中字元的最長子字串。

SELECT rtrim('test', 't'); -- tes
SELECT rtrim('test...', '.'); -- test
split(string, delimiter) -> array(varchar)

依據 delimiter 分割 string 並傳回陣列。

split(string, delimiter, limit) -> array(varchar)

依據 delimiter 分割 string 並傳回大小最多為 limit 的陣列。陣列中的最後一個元素始終包含 string 中剩餘的所有內容。limit 必須為正數。

split_part(string, delimiter, index) -> varchar()

依據 delimiter 分割 string 並傳回欄位 index。欄位索引從 1 開始。如果索引大於欄位數,則傳回 null。

split_to_map(string, entryDelimiter, keyValueDelimiter) -> map<varchar, varchar>()

依據 entryDelimiterkeyValueDelimiter 分割 string 並傳回對應。 entryDelimiterstring 分割為鍵值對。keyValueDelimiter 將每個配對分割為鍵和值。請注意,entryDelimiterkeyValueDelimiter 會被逐字解讀,即作為完整的字串比對。

split_to_map(string, entryDelimiter, keyValueDelimiter, function(K,V1,V2,R)) -> map<varchar, varchar>()

使用 entryDelimiterkeyValueDelimiter 分割 string 並返回一個 map。entryDelimiterstring 分割成鍵值對。keyValueDelimiter 將每個鍵值對分割成鍵和值。請注意,entryDelimiterkeyValueDelimiter 會被逐字解讀,即視為完整字串匹配。如果出現重複的鍵,則會調用 function(K,V1,V2,R) 來決定 map 中應該保留的值。

SELECT(split_to_map('a:1;b:2;a:3', ';', ':', (k, v1, v2) -> v1)); -- {"a": "1", "b": "2"}
SELECT(split_to_map('a:1;b:2;a:3', ';', ':', (k, v1, v2) -> CONCAT(v1, v2))); -- {"a": "13", "b": "2"}
split_to_multimap(string, entryDelimiter, keyValueDelimiter) -> map(varchar, array(varchar))

使用 entryDelimiterkeyValueDelimiter 分割 string,並返回一個 map,其中每個唯一的鍵都對應一個值陣列。entryDelimiterstring 分割成鍵值對。keyValueDelimiter 將每個鍵值對分割成鍵和值。每個鍵的值會按照它們在 string 中出現的順序排列。請注意,entryDelimiterkeyValueDelimiter 會被逐字解讀,即視為完整字串匹配。

strpos(string, substring) -> bigint()

返回 substringstring 中首次出現的起始位置。位置從 1 開始。如果找不到,則返回 0

starts_with(string, substring) -> boolean()

返回 string 是否以 substring 開頭。

strpos(string, substring, instance) -> bigint()

返回 substringstring 中第 N 個 instance 的位置。instance 必須為正數。位置從 1 開始。如果找不到,則返回 0

strrpos(string, substring) -> bigint()

返回 substringstring 中最後一次出現的起始位置。位置從 1 開始。如果找不到,則返回 0

strrpos(string, substring, instance) -> bigint()

返回 substringstring 中,從字串結尾開始算起的第 N 個 instance 的位置。instance 必須為正數。位置從 1 開始。如果找不到,則返回 0

position(substring IN string) -> bigint()

返回 substringstring 中首次出現的起始位置。位置從 1 開始。如果找不到,則返回 0

substr(string, start) -> varchar()

從起始位置 start 開始,返回 string 的其餘部分。位置從 1 開始。負的起始位置會被視為相對於字串結尾的位置。

substr(string, start, length) -> varchar()

從起始位置 start 開始,返回 string 中長度為 length 的子字串。位置從 1 開始。負的起始位置會被視為相對於字串結尾的位置。

trail(string, N) -> varchar()

返回輸入字串的最後 N 個字元。

trim(string) -> varchar()

移除 string 開頭和結尾的空白字元。

可識別的空白字元

代碼

描述

代碼

描述

9

TAB(水平製表符)

U+1680

歐甘文字空格符號

10

LF(NL 換行,新行)

U+2000

半方空格

11

VT(垂直製表符)

U+2001

全方空格

12

FF(NP 換頁,新頁)

U+2002

半形空格

13

CR(歸位字元)

U+2003

全形空格

28

FS(檔案分隔符)

U+2004

三分之一全形空格

29

GS(群組分隔符)

U+2005

四分之一全形空格

30

RS(記錄分隔符)

U+2006

四分之一全形空格

31

US(單位分隔符)

U+2008

標點空格

32

空格

U+2009

窄空格

_

_

U+200a

髮絲空格

_

_

U+200a

髮絲空格

_

_

U+2028

行分隔符

_

_

U+2029

段落分隔符

_

_

U+205f

中等數學空格

_

_

U+3000

表意文字空格

trim(string, chars) -> varchar()

string 的開頭和結尾移除最長的、僅包含 chars 中字元的子字串。

SELECT trim('test', 't'); -- es
SELECT trim('.t.e.s.t.', '.t'); -- e.s
upper(string) -> varchar()

string 轉換為大寫。

word_stem(word) -> varchar()

返回英文單字 word 的詞幹。

word_stem(word, lang) -> varchar()

返回 lang 語言中 word 的詞幹。

Unicode 函數

normalize(string) -> varchar()

使用 NFC 正規化形式轉換 string

normalize(string, form) -> varchar()

使用指定的正規化形式轉換 stringform 必須是以下關鍵字之一

形式

描述

NFD

標準分解

NFC

標準分解,然後進行標準組合

NFKD

相容分解

NFKC

相容分解,然後進行標準組合

注意

這個 SQL 標準函數具有特殊的語法,需要將 form 指定為關鍵字,而不是字串。

to_utf8(string) -> varbinary()

string 編碼為 UTF-8 可變二進位表示形式。

from_utf8(binary) -> varchar()

binary 解碼一個 UTF-8 編碼的字串。無效的 UTF-8 序列會被替換為 Unicode 替換字元 U+FFFD

from_utf8(binary, replace) -> varchar()

binary 解碼一個 UTF-8 編碼的字串。無效的 UTF-8 序列會被替換為 replace。替換字串 replace 必須是單一字元或為空(在此情況下,無效字元會被移除)。

key_sampling_percent(varchar) -> double()

根據給定的 varchar 的雜湊值,產生一個介於 0.0 和 1.0 之間的 double 值。此函數適用於確定性資料取樣。