Lindorm SQL は、文字列値の操作、検索、ハッシュ化のための一連の文字列関数をサポートしています。このページで説明するすべての関数には、LindormTable 2.5.1.1 以降が必要です。
現在のバージョンを確認したり、アップグレードしたりするには、「LindormTable のリリースノート」および「Lindorm インスタンスのマイナーエンジンバージョンのアップグレード」をご参照ください。
サポートされている文字列関数
| カテゴリ | 関数 | 説明 |
|---|---|---|
| 一般的な操作 | 複数の文字列を 1 つの文字列に連結します | |
| 文字列の文字数を返します | ||
| 部分文字列のすべての出現箇所を置換します | ||
| 文字列を反転させます | ||
| 位置と長さを指定して部分文字列を抽出します | ||
| 先頭と末尾のスペースを削除します | ||
| 大文字/小文字の変換 | すべての文字を小文字に変換します | |
| すべての文字を大文字に変換します | ||
| 正規表現 | 正規表現に一致する部分文字列を置換します | |
| 正規表現に一致する最初の部分文字列を抽出します | ||
| プレフィックスマッチング | 文字列が指定されたプレフィックスで始まる場合に true を返します | |
| 全文検索 | 検索インデックスを使用して、列の値と検索式を照合します | |
| 暗号化ハッシュ | 文字列の MD5 ハッシュを返します | |
| 文字列の SHA256 ハッシュを返します |
CONCAT
2 つ以上の文字列を 1 つの文字列に連結します。値の間にデリミタは追加されません。
構文
CONCAT('string1', 'string2', ..., 'stringN')パラメーター
| パラメーター | 必須 | 説明 |
|---|---|---|
'string1', 'string2', ..., 'stringN' | はい | 連結する文字列。2 つ以上の文字列値を渡します。 |
例
SELECT concat('a', 'b', 'c') AS val;結果:
+-----+
| val |
+-----+
| abc |
+-----+LENGTH
文字列の文字数を返します。
構文
LENGTH('string')パラメーター
| パラメーター | 必須 | 説明 |
|---|---|---|
string | はい | 測定する文字列。 |
例
SELECT length('abc') AS len;結果:
+-----+
| len |
+-----+
| 3 |
+-----+LOWER
文字列内のすべての文字を小文字に変換します。文字以外の文字は影響を受けません。
構文
LOWER('string')パラメーター
| パラメーター | 必須 | 説明 |
|---|---|---|
string | はい | 変換する文字列。 |
例
例 1: ABC を小文字に変換します。
SELECT lower('ABC') AS val;結果:
+-----+
| val |
+-----+
| abc |
+-----+例 2: 大文字と小文字が混在する文字列を小文字に変換します。
SELECT lower('Abc') AS val;結果:
+-----+
| val |
+-----+
| abc |
+-----+UPPER
文字列内のすべての文字を大文字に変換します。文字以外の文字は影響を受けません。
構文
UPPER('string')パラメーター
| パラメーター | 必須 | 説明 |
|---|---|---|
string | はい | 変換する文字列。 |
例
例 1: abc を大文字に変換します。
SELECT upper('abc') AS val;結果:
+-----+
| val |
+-----+
| ABC |
+-----+例 2:大文字と小文字が混在した文字列を大文字に変換します。
SELECT upper('aBC') AS val;結果:
+-----+
| val |
+-----+
| ABC |
+-----+TRIM
文字列の先頭と末尾のスペースを削除します。文字列内のスペースは保持されます。
構文
TRIM('string')パラメーター
| パラメーター | 必須 | 説明 |
|---|---|---|
string | はい | トリミングする文字列。 |
例
SELECT trim(' abc ') AS str;結果:
+-----+
| str |
+-----+
| abc |
+-----+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 |
+-----+例 2: abcbc の中の bc のすべての出現箇所を cd に置換します。
SELECT replace('abcbc', 'bc', 'cd') AS val;結果:
+-------+
| val |
+-------+
| acdcd |
+-------+REVERSE
文字列内の文字を反転させます。
構文
REVERSE('string')パラメーター
| パラメーター | 必須 | 説明 |
|---|---|---|
string | はい | 反転させる文字列。 |
例
SELECT reverse('abc') AS val;結果:
+-----+
| val |
+-----+
| cba |
+-----+SUBSTR
指定された位置から始まる部分文字列を、オプションで長さ制限を付けて抽出します。
構文
SUBSTR(string, position [, length])パラメーター
| パラメーター | 必須 | 説明 |
|---|---|---|
string | はい | ソース文字列。 |
position | はい | 抽出を開始する 1 から始まる位置。1 以上の整数である必要があります。 |
length | いいえ | 抽出する文字数。1 以上の整数である必要があります。デフォルト:position から文字列の末尾までを抽出します。 |
例
例 1: 位置 2 から文字列の末尾までを抽出します。
SELECT substr('abc', 2) AS val;結果:
+-----+
| val |
+-----+
| bc |
+-----+例 2: 位置 1 から 2 文字を抽出します。
SELECT substr('abc', 1, 2) AS val;結果:
+-----+
| val |
+-----+
| ab |
+-----+START_WITH
文字列が指定されたプレフィックスで始まる場合は true を、そうでない場合は false を返します。
構文
START_WITH('string', 'prefix')パラメーター
| パラメーター | 必須 | 説明 |
|---|---|---|
string | はい | チェックする文字列。 |
prefix | はい | string の先頭と照合するプレフィックス。 |
例
例 1: abc が ab で始まるかどうかをチェックします。
SELECT start_with('abc', 'ab') AS val;結果:
+------+
| val |
+------+
| true |
+------+例 2: abc が bc で始まるかどうかをチェックします。
SELECT start_with('abc', 'bc') AS val;結果:
+-------+
| val |
+-------+
| false |
+-------+REGEXP_REPLACE
指定された位置から検索を開始し、正規表現に一致する部分文字列を置換します。
構文
REGEXP_REPLACE('string', pattern, replacement [, position])パラメーター
| パラメーター | 必須 | 説明 |
|---|---|---|
string | はい | ソース文字列。 |
pattern | はい | 一致ルールを定義する正規表現パターン。 |
replacement | はい | 各一致箇所に代入する文字列。 |
position | いいえ | 検索を開始する 1 から始まる文字位置。1 以上の整数である必要があります。デフォルト:1 (最初の文字から開始)。 |
例
例 1: abc の中の b のすべての一致を c に置換します (デフォルト位置)。
SELECT regexp_replace('abc', 'b', 'c') AS val;結果:
+-----+
| val |
+-----+
| acc |
+-----+例 2: 位置 2 から開始して、abcbc の中の b の一致を置換します。
SELECT regexp_replace('abcbc', 'b', 'c', 2) AS val;結果:
+-------+
| val |
+-------+
| acccc |
+-------+例 3: 位置 3 から開始して、abcbc の中の b の一致を置換します。位置 2 の b は置換されません。
SELECT regexp_replace('abcbc', 'b', 'c', 3) AS val;結果:
+-------+
| val |
+-------+
| abccc |
+-------+REGEXP_SUBSTR
指定された位置から検索を開始し、正規表現に一致する最初の部分文字列を返します。
構文
REGEXP_SUBSTR('string', pattern [, position])パラメーター
| パラメーター | 必須 | 説明 |
|---|---|---|
string | はい | ソース文字列。 |
pattern | はい | 一致ルールを定義する正規表現パターン。 |
position | いいえ | 検索を開始する 1 から始まる文字位置。1 以上の整数である必要があります。デフォルト:1 (最初の文字から開始)。 |
例
例 1: 最初の文字から (デフォルト)、abc の中の b を検索します。
SELECT regexp_substr('abc', 'b') AS val;結果:
+-----+
| val |
+-----+
| b |
+-----+例 2: 位置 3 から開始して、abc の中の b を検索します。b は位置 2 にあるため、一致は見つかりません。
SELECT regexp_substr('abc', 'b', 3) AS val;結果:
+-----+
| val |
+-----+
| |
+-----+MD5
文字列の MD5 ハッシュを返します。
構文
MD5('string')パラメーター
| パラメーター | 必須 | 説明 |
|---|---|---|
string | はい | ハッシュ化する文字列。 |
例
SELECT md5('abc') AS val;結果:
+----------------------------------+
| val |
+----------------------------------+
| 900150983cd24fb0d6963f7d28e17f72 |
+----------------------------------+SHA256
文字列の SHA256 ハッシュを返します。
構文
SHA256('string')パラメーター
| パラメーター | 必須 | 説明 |
|---|---|---|
string | はい | ハッシュ化する文字列。 |
例
この例では、サンプルテーブルを作成し、行を挿入してから、列の値の SHA256 ハッシュをクエリします。
-- サンプルテーブルを作成します。
CREATE TABLE tb (id INT, name VARCHAR, address VARCHAR, PRIMARY KEY(id, name));
-- 行を挿入します。
UPSERT INTO tb (id, name, address) VALUES (1, 'jack', 'hz');
-- name 列の SHA256 ハッシュをクエリします。
SELECT sha256(name) AS sc FROM tb WHERE id = 1;結果:
+------------------------------------------------------------------+
| sc |
+------------------------------------------------------------------+
| 31611159e7e6ff7843ea4627745e89225fc866621cfcfdbd40871af4413747cc |
+------------------------------------------------------------------+MATCH
全文検索式と検索インデックスを使用して列の値を検索します。結果はデフォルトで関連度の降順にソートされます。
MATCH には LindormTable 2.7.2 以降が必要です。アップグレードするには、「LindormTable のリリースノート」および「インスタンスのアップグレード」をご参照ください。
MATCH は検索インデックスでのみ機能します。MATCH 条件と検索インデックスの両方が存在する場合、システムは自動的に検索インデックスを使用します。
注意事項
インデックスが作成されていない列:システムはまず検索インデックスを介して行を取得し、次にインデックスが作成されていない列を 1 行ずつフィルター処理します。これにより、大規模なデータセットではパフォーマンスが低下する可能性があります。これを回避するには、ADD COLUMN 文を使用して関連する列を検索インデックスに追加します。
プライマリテーブルとセカンダリインデックス:MATCH はプライマリテーブルまたはセカンダリインデックスではサポートされていません。これらについては、代わりにあいまいクエリに
LIKEを使用してください。あいまいクエリは、トークン化されたクエリよりもパフォーマンスが低くなります。MATCH と LIKE の組み合わせ:同じクエリで両方を使用する場合は、検索インデックスで関連する列をトークン化された列として設定します。
構文
MATCH (column_identifiers) AGAINST (search_expr)MATCH は SELECT 文の WHERE 句でのみ使用できます。
パラメーター
| パラメーター | 必須 | 説明 |
|---|---|---|
column_identifiers | はい | 検索する 1 つ以上の列名 (カンマ区切り)。複数の列が指定された場合、それらの値が結合されて一緒に照合されます。指定されたすべての列に対して検索インデックスが存在し、単語分割用にアナライザーが設定されている必要があります。詳細については、「検索インデックス機能の有効化」および「CREATE INDEX」をご参照ください。 |
search_expr | はい | 一致ルールを定義する文字列定数。下記の「一致ルールの構文」をご参照ください。 |
一致ルールの構文
一致ルールは、スペースで区切られた 1 つ以上の条件です。各条件は次のいずれかです:
単一の単語 — その単語を含む行に一致します。例:
hello引用符で囲まれたフレーズ — 単語分割なしで、その正確なフレーズを含む行に一致します。例:
"hello world"括弧で囲まれたサブルール — 囲まれたルールを満たす行に一致します。例:
(another "hello world")
条件の前に記号を付けると、その動作が変わります:
| 記号 | 意味 |
|---|---|
+ | 条件を満たす必要があります (AND) |
- | 条件を満たしてはなりません (NOT) |
| *(なし)* | 条件はオプションですが、一致する行のランクが高くなります |
例
以下の例では、このサンプルテーブルを使用します:
-- サンプルテーブルを作成します。
CREATE TABLE tb (id INT, c1 VARCHAR, PRIMARY KEY(id));
-- 検索インデックスを作成します。この文を実行する前に、検索インデックス機能を有効にしてください。
CREATE INDEX idx USING SEARCH ON tb (c1(type=text));
-- 行を挿入します。
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');例 1: c1 に hello または world (あるいは両方) が含まれる行を返します。両方の term に一致する行のランクが高くなります。
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 |
+----+------------------+例 2: c1 が world を含み、オプションで hello を含む行を返します。両方の term を持つ行のランクが高くなります。
SELECT * FROM tb WHERE MATCH (c1) AGAINST ('hello +world');結果:
+----+----------------+
| id | c1 |
+----+----------------+
| 3 | hello world |
| 2 | world |
| 4 | hello my world |
+----+----------------+例 3: c1 が world を含むが hello を含まない行を返します。
SELECT * FROM tb WHERE MATCH (c1) AGAINST ('-hello +world');結果:
+----+-------+
| id | c1 |
+----+-------+
| 2 | world |
+----+-------+例 4: c1 が正確なフレーズ hello world を含む行を返します。
SELECT * FROM tb WHERE MATCH (c1) AGAINST ('"hello world"');結果:
+----+-------------+
| id | c1 |
+----+-------------+
| 3 | hello world |
+----+-------------+例 5: c1 が hello を含み、かつ you または me の少なくとも 1 つを含む行を返します。
SELECT * FROM tb WHERE MATCH (c1) AGAINST ('+hello +(you me)');結果:
+----+------------------+
| id | c1 |
+----+------------------+
| 6 | hello you and me |
| 5 | hello you |
+----+------------------+