本文介紹Lindorm支援的字串函數的用法及樣本。
引擎與版本
字串函數適僅用於寬表引擎,且引擎版本需為2.5.1.1及以上版本。
函數列表
Lindorm支援的字串函數如下表所示:
函數 | 說明 |
將多個字串拼接成一個新的字串。 | |
計算字串的長度。 | |
將字串中所有的字母都轉換為小寫字母。 | |
計算指定字串的MD5值。 | |
計算指定字串的SHA256編碼值。 | |
將匹配指定規則的子串替換為新的字串。 | |
返回逆序的字串。 | |
從字串指定位置開始,將匹配指定規則的子串替換為新的字串。 | |
返回從字串指定位置開始,匹配指定規則的子串。 | |
返回字串中指定長度的子串。 | |
判斷字串的首碼是否為指定字串。 | |
刪除字串前後的空格。 | |
將字串中所有的字母都轉換為大寫字母。 | |
判斷指定列的值是否匹配指定的規則。 |
CONCAT函數
將多個字串拼接成一個新的字串。
文法
CONCAT('string1','string2',...,'stringN')
參數說明
參數 | 是否必填 | 說明 |
'string1','string2',...,'stringN' | 是 | 需要拼接的字串,多個字串之間用英文逗號(,)分隔。 |
樣本
將單獨的字串a
、b
和c
進行拼接,組成一個新的字串abc
。
SELECT concat('a','b','c') AS val;
返回結果:
+--------+
| val |
+--------+
| abc |
+--------+
返回結果為拼接後的新字串,且字串中間無間隔符。
LENGTH函數
計算字串的長度。
文法
LENGTH('string')
參數說明
參數 | 是否必填 | 說明 |
string | 是 | 待匹配的字串。 |
樣本
計算字串abc
的長度。
SELECT length('abc') AS len;
返回結果:
+-----+
| len |
+-----+
| 3 |
+-----+
返回結果為3,表示字串abc
的長度為3。
LOWER函數
將字串中所有的字母都轉換為小寫字母。
文法
LOWER('string')
參數說明
參數 | 是否必填 | 說明 |
string | 是 | 待轉換的字串。 |
樣本
樣本1:將字串
ABC
中所有的字母都轉換為小寫字母。SELECT lower('ABC') AS val;
返回結果:
+--------+ | val | +--------+ | abc | +--------+
返回結果為abc,表示已將字串
ABC
中所有的大寫字母都轉換為小寫字母abc
。樣本2:將字串
Abc
中所有的字母都轉換為小寫字母。SELECT lower('Abc') AS val;
返回結果:
+--------+ | val | +--------+ | abc | +--------+
返回結果為abc,表示已將字串
Abc
中所有的大寫字母都轉換為小寫字母abc
。
MD5函數
計算指定字串的MD5值。
文法
MD5('string')
參數說明
參數 | 是否必填 | 說明 |
string | 是 | 待匹配的字串。 |
樣本
計算指定字串abc
的MD5值。
SELECT md5('abc') AS val;
返回結果:
+----------------------------------+
| val |
+----------------------------------+
| 900150983cd24fb0d6963f7d28e17f72 |
+----------------------------------+
返回結果為字串abc
的MD5值。
SHA256函數
計算指定字串的SHA256編碼值。
文法
SHA256('string')
參數說明
參數 | 是否必填 | 說明 |
string | 是 | 待編碼的字串。 |
樣本
假設表結構及表中資料如下:
-- 建立樣本表
CREATE TABLE tb (id int, name varchar, address varchar, PRIMARY KEY(id, name));
-- 寫入資料
UPSERT INTO tb (id, name, address) VALUES (1, 'jack', 'hz');
查詢id
值為1
的行中對應的name
列資料的SHA256編碼值。
SELECT sha256(name) AS sc FROM tb WHERE id=1;
返回結果:
+------------------------------------------------------------------+
| sc |
+------------------------------------------------------------------+
| 31611159e7e6ff7843ea4627745e89225fc866621cfcfdbd40871af4413747cc |
+------------------------------------------------------------------+
返回結果為字串jack
的SHA256編碼值。
REPLACE函數
將匹配指定規則的子串替換為新的字串。
文法
REPLACE('string','from_str','to_str')
參數說明
參數 | 是否必填 | 說明 |
string | 是 | 待匹配的字串。 |
from_str | 是 | 指定字串。 |
to_str | 是 | 替換的字串。 |
樣本,
樣本1:將字串
abc
中所有匹配bc
的子串都替換為cd
。SELECT replace('abc','bc','cd') AS val;
返回結果:
+-----+ | val | +-----+ | acd | +-----+
返回結果為acd,表示已將字串
abc
中匹配bc
的子串替換為cd
。樣本2:將字串
abcbc
中所有匹配bc
的子串都替換為cd
。SELECT replace('abcbc', 'bc', 'cd') AS val;
返回結果:
+-------+ | val | +-------+ | acdcd | +-------+
返回結果為acdcd,表示已將字串
abcbc
中匹配bc
的子串替換為cd
。
REVERSE函數
返回逆序的字串。
文法
REVERSE('string')
參數說明
參數 | 是否必填 | 說明 |
string | 是 | 待匹配的字串。 |
樣本
將字串abc
逆序輸出。
SELECT reverse('abc') AS val;
返回結果:
+-----+
| val |
+-----+
| cba |
+-----+
返回結果為cba ,表示已將字串abc逆序輸出。
REGEXP_REPLACE函數
從字串指定位置開始,將匹配指定規則的子串替換為新的字串。
文法
REGEXP_REPLACE('string',pat,rep,[pos])
參數說明
參數 | 是否必填 | 說明 |
string | 是 | 待匹配的字串。 |
pattern | 是 | Regex。 |
rep | 是 | 替換的字串。 |
position | 否 | 開始匹配字串的位置,取值為大於等於1的整數。不指定該參數時,預設從第1個字元開始匹配。 |
樣本
樣本1:不指定
pos
參數。預設從第1個字元開始匹配,並將匹配b
的子串替換為c
。SELECT regexp_replace('abc', 'b', 'c') AS val;
返回結果:
+-----+ | val | +-----+ | acc | +-----+
返回結果為acc,表示已將字串
abc
中匹配b
的子串替換為c
。樣本2:指定
pos
參數。從第2個字元開始匹配,並將匹配b
的子串替換為c
。SELECT regexp_replace('abcbc', 'b', 'c', 2) AS val;
返回結果:
+-------+ | val | +-------+ | acccc | +-------+
acccc,表示已將字串abcbc
中第2個字元至字串末尾匹配b
的子串替換為c
。
樣本3:指定
pos
參數。從第3個字元開始匹配,並將匹配b
的子串替換為c
。SELECT regexp_replace('abcbc', 'b', 'c', 3) AS val;
返回結果:
+-------+ | val | +-------+ | abccc | +-------+
返回結果為abccc,表示已將字串
abcbc
中第3個字元至字串末尾匹配b
的子串替換為c
。
REGEXP_SUBSTR函數
返回從字串指定位置開始,匹配指定規則的子串。
文法
REGEXP_SUBSTR('string', pat, [pos])
參數說明
參數 | 是否必填 | 說明 |
string | 是 | 待匹配的字串。 |
pattern | 是 | Regex。 |
position | 否 | 開始匹配字串的位置,取值為大於等於1的整數。不指定該參數時,預設從第1個字元開始匹配。 |
樣本
樣本1:指定
pos
參數,從字串abc
的第3個字元開始匹配b
的子串。SELECT regexp_substr('abc', 'b', 3) AS val;
返回結果:
+-----+ | val | +-----+ | | +-----+
返回結果為空,表示從字串第3個字元開始無匹配
b
的子串。樣本2:不指定
pos
參數,預設從字串abc
的第1個字元開始匹配b
的子串。SELECT regexp_substr('abc', 'b') AS val;
返回結果:
+-----+ | val | +-----+ | b | +-----+
返回結果為b,表示從字串第1個字元開始截取匹配
b
的子串。
SUBSTR函數
返回字串中指定長度的子串。
文法
SUBSTR( string, pos, [len])
參數說明
參數 | 是否必填 | 說明 |
string | 是 | 待匹配的字串。 |
position | 是 | 開始截取字串的位置,取值為大於等於1的整數。 |
len | 否 | 從左向右截取字串的長度,取值為大於等於1的整數。不指定該參數時,則預設返回 |
樣本
樣本1:不指定
len
參數,預設返回字串abc
第2個字元到字串末尾的子串。SELECT substr('abc', 2) AS val;
返回結果:
+-----+ | val | +-----+ | bc | +-----+
返回結果為bc,表示字串
abc
第2個字元至字串末尾的子串。樣本2:指定
len
參數,返回字串abc
第1個字元到第2個字元的子串。SELECT substr('abc', 1, 2) AS val;
返回結果:
+-----+ | val | +-----+ | ab | +-----+
返回結果為ab,表示字串
abc
第1個字元到第2個字元的子串。
START_WITH函數
判斷字串的首碼是否為指定字串。
文法
START_WITH('string1', 'string2')
參數說明
參數 | 是否必填 | 說明 |
string1 | 是 | 待匹配的字串。 |
string2 | 是 | 指定字串。 |
樣本
樣本1:判斷字串
abc
的首碼是否為指定字串ab
。SELECT start_with('abc', 'ab') AS val;
返回結果:
+--------+ | val | +--------+ | true | +--------+
返回結果為true,表示字串
abc
的首碼是指定字串ab
。樣本2:判斷字串
abc
的首碼是否為指定字串bc
。SELECT start_with('abc', 'bc') AS val;
返回結果:
+--------+ | val | +--------+ | false | +--------+
返回結果為false,表示字串
abc
的首碼不是指定字串bc
。
TRIM函數
刪除字串前後的空格。
文法
TRIM('string')
參數說明
參數 | 是否必填 | 說明 |
string | 是 | 待匹配的字串。 |
樣本
刪除指定字串 abc
前後的空格。
SELECT trim(' abc ') AS str;
返回結果:
+-----+
| str |
+-----+
| abc |
+-----+
返回結果為刪除前後空格後的結果。
UPPER函數
將字串中所有的字母都轉換為大寫字母。
文法
UPPER('string')
參數說明
參數 | 是否必填 | 說明 |
string | 是 | 待轉換的字串。 |
樣本
樣本1:將字串
abc
中所有的字母都轉換為大寫字母。SELECT upper('abc') AS val;
返回結果:
+--------+ | val | +--------+ | ABC | +--------+
返回結果為ABC,表示已將字串
abc
中所有的小寫字母轉換為大寫字母ABC
。樣本2:將字串
aBC
中所有的字母都轉換為大寫字母。SELECT upper('aBC') AS val;
返回結果:
+--------+ | val | +--------+ | ABC | +--------+
返回結果為ABC,表示已將字串
aBC
中所有的小寫字母都轉換為大寫字母ABC
。
MATCH函數
判斷指定列的值是否匹配指定的規則。
文法
MATCH (column_identifiers) AGAINST (search_expr [search_modifier])
目前MATCH函數只能用於SQL查詢的
WHERE
子句中。包含MATCH函數的查詢語句,其結果預設按照MATCH函數的匹配程度倒序排序。
參數說明
參數 | 是否必填 | 說明 |
column_identifiers | 是 | 需要進行匹配的列。如有多個列,請以半形逗號(,)分隔。提供了多個列時,這些列的內容將會組合後共同參與匹配。 重要 column_identifiers指定的列必須已建立搜尋索引,且均為分詞列。搜尋索引的開通及建立方式,請參見開通搜尋索引和CREATE INDEX。 |
search_expr | 是 | 一個字串常量,指定匹配規則字串。詳細說明,請參見匹配規則說明。 |
search_modifier | 否 | search_modifier可以指定為 |
匹配規則說明
匹配規則由一個或多個條件構成,每個條件之間以空格分隔。一個條件可以是以下幾種之一:
單個詞語,表示期望包含該詞語,例如
hello
。以雙引號包圍的短語,表示期望包含這個短語的整體,不做分詞,例如
"hello world"
表示擷取包含"hello world"
短語的資料。以括弧包圍的另一個匹配規則,表示期望滿足括弧內的匹配規則,例如
(another "hello world")
。
在條件前添加符號,可以改變該條件的匹配行為:
+
表示該條件必須被滿足。-
表示該條件不能被滿足。不帶符號時,表示該條件不必須被滿足,但滿足了該條件的資料可以獲得更靠前的排序。
樣本
假設表結構及表中資料如下:
-- 建立樣本表tb
CREATE TABLE tb (id INT, c1 VARCHAR, PRIMARY KEY(id));
-- 建立搜尋索引。建立前請確保已開通搜尋索引
CREATE INDEX idx USING SEARCH ON tb (c1(type=text));
-- 向樣本表tb中插入樣本資料
UPSERT INTO tb (id,c1) VALUES (1,'hello');
UPSERT INTO tb (id,c1) VALUES (2,'world');
UPSERT INTO tb (id,c1) VALUES (3,'hello world');
UPSERT INTO tb (id,c1) VALUES (4,'hello my world');
UPSERT INTO tb (id,c1) VALUES (5,'hello you');
UPSERT INTO tb (id,c1) VALUES (6,'hello you and me');
UPSERT INTO tb (id,c1) VALUES (7,'you and me');
樣本一:查詢
c1
列中包含單詞hello
或單詞world
的資料。SELECT * FROM tb WHERE MATCH (c1) AGAINST ('hello world');
返回結果:
+----+------------------+ | id | c1 | +----+------------------+ | 3 | hello world | | 2 | world | | 4 | hello my world | | 5 | hello you | | 1 | hello | | 6 | hello you and me | +----+------------------+
樣本二:查詢
c1
列中可能包含單詞hello
,但必須包含單詞world
的資料。SELECT * FROM tb WHERE MATCH (c1) AGAINST ('hello +world');
返回結果:
+----+----------------+ | id | c1 | +----+----------------+ | 3 | hello world | | 2 | world | | 4 | hello my world | +----+----------------+
樣本三:查詢
c1
列中包含單詞world
,但不包含單詞hello
的資料。SELECT * FROM tb WHERE MATCH (c1) AGAINST ('-hello +world');
返回結果:
+----+-------+ | id | c1 | +----+-------+ | 2 | world | +----+-------+
樣本四:查詢
c1
列中包含短語hello world
的資料。SELECT * FROM tb WHERE MATCH (c1) AGAINST ('"hello world"');
返回結果:
+----+-------------+ | id | c1 | +----+-------------+ | 3 | hello world | +----+-------------+
樣本五:查詢
c1
列中包含單詞hello
,且同時包含單詞you
或單詞me
的資料。SELECT * FROM tb WHERE MATCH (c1) AGAINST ('+hello +(you me)');
返回結果:
+----+------------------+ | id | c1 | +----+------------------+ | 6 | hello you and me | | 5 | hello you | +----+------------------+