字串函數與運算子¶
字串運算子¶
||
運算子執行串聯。
字串函數¶
注意
這些函數假設輸入字串包含有效的 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()¶
傳回
string1
、string2
、...
、stringN
的串聯。 此函數提供與 SQL 標準串聯運算子 (||
) 相同的功能。
- ends_with(string, substring) -> boolean()¶
傳回
string
是否以substring
結尾。
- hamming_distance(string1, string2) -> bigint()¶
傳回
string1
和string2
的漢明距離,即對應字元不同的位置數。 請注意,這兩個字串必須具有相同的長度。
- length(string) -> bigint()¶
以字元傳回
string
的長度。
- levenshtein_distance(string1, string2) -> bigint()¶
傳回
string1
和string2
的 Levenshtein 編輯距離,也就是將string1
轉換為string2
所需的最小單字元編輯次數(插入、刪除或替換)。
- lower(string) -> varchar()¶
將
string
轉換為小寫。
- lpad(string, size, padstring) -> varchar()¶
使用
padstring
在string
的左側填充至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()¶
使用
padstring
在string
的右側填充至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>()¶
依據
entryDelimiter
和keyValueDelimiter
分割string
並傳回對應。entryDelimiter
將string
分割為鍵值對。keyValueDelimiter
將每個配對分割為鍵和值。請注意,entryDelimiter
和keyValueDelimiter
會被逐字解讀,即作為完整的字串比對。
- split_to_map(string, entryDelimiter, keyValueDelimiter, function(K,V1,V2,R)) -> map<varchar, varchar>()¶
使用
entryDelimiter
和keyValueDelimiter
分割string
並返回一個 map。entryDelimiter
將string
分割成鍵值對。keyValueDelimiter
將每個鍵值對分割成鍵和值。請注意,entryDelimiter
和keyValueDelimiter
會被逐字解讀,即視為完整字串匹配。如果出現重複的鍵,則會調用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))¶
使用
entryDelimiter
和keyValueDelimiter
分割string
,並返回一個 map,其中每個唯一的鍵都對應一個值陣列。entryDelimiter
將string
分割成鍵值對。keyValueDelimiter
將每個鍵值對分割成鍵和值。每個鍵的值會按照它們在string
中出現的順序排列。請注意,entryDelimiter
和keyValueDelimiter
會被逐字解讀,即視為完整字串匹配。
- strpos(string, substring) -> bigint()¶
返回
substring
在string
中首次出現的起始位置。位置從1
開始。如果找不到,則返回0
。
- starts_with(string, substring) -> boolean()¶
返回
string
是否以substring
開頭。
- strpos(string, substring, instance) -> bigint()¶
返回
substring
在string
中第 N 個instance
的位置。instance
必須為正數。位置從1
開始。如果找不到,則返回0
。
- strrpos(string, substring) -> bigint()¶
返回
substring
在string
中最後一次出現的起始位置。位置從1
開始。如果找不到,則返回0
。
- strrpos(string, substring, instance) -> bigint()¶
返回
substring
在string
中,從字串結尾開始算起的第 N 個instance
的位置。instance
必須為正數。位置從1
開始。如果找不到,則返回0
。
- position(substring IN string) -> bigint()¶
返回
substring
在string
中首次出現的起始位置。位置從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()¶
使用指定的正規化形式轉換
string
。form
必須是以下關鍵字之一形式
描述
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 值。此函數適用於確定性資料取樣。