表に格納されている文字列に対して、文字列の切り捨て、連結、変換、比較、検索などの操作を実行する場合は、MaxCompute SQLでサポートされている文字列関数を使用できます。 このトピックでは、MaxCompute SQLでサポートされている文字列関数の構文とパラメーターについて説明します。 このトピックでは、文字列関数の使用方法の例も示します。
次の表に、MaxCompute SQLでサポートされている文字列関数を示します。
関数 | 説明 |
指定された文字列の最初の文字のASCIIコードを返します。 | |
文字列Bに表示される文字列Aの文字数を計算します。 | |
ASCIIコードを文字に変換します。 | |
指定されたすべての文字列を連結し、最後の文字列を返します。 | |
指定された区切り文字を使用して、配列内のすべての入力文字列を連結します。 | |
指定されたエンコード形式で文字列をデコードします。 | |
指定したエンコード形式で文字列をエンコードします。 | |
コンマ (,) で区切られた複数の文字列のうち、指定した文字列の位置を返します。 | |
数値を指定した形式の文字列に変換します。 | |
指定されたエンコード形式のバイナリデータをUTF-8エンコード文字列に変換します。 | |
指定されたJSON文字列と指定された出力形式に基づいて、ARRAY、MAP、またはSTRUCT型のデータを返します。 | |
指定されたメソッドを使用して、標準のJSON文字列から単一の文字列を抽出します。 | |
文字列を指定した形式の文字列に変換します。 形式では、単語はタイトルケースにあり、スペースで区切られています。 タイトルケースでは、各単語の最初の文字が大文字になり、各単語の他の文字は小文字になります。 | |
文字列Bの文字列Aの位置を返します。 | |
文字列をある文字セットから別の文字セットに変換できるかどうかを指定します。 | |
一連の入力キーに基づいて、標準のJSON文字列から文字列を抽出します。 | |
文字列をキーと値のペアに分割し、キーと値のペアを分離して、指定されたキーに対応する値を返します。 | |
文字列をキーと値のペアに分割し、キーと値のペアを分離してから、キーに対応する値を返します。 | |
文字列の長さを計算します。 | |
文字列の長さをバイト単位で計算します。 | |
別の文字列内の指定された文字列の位置を返します。 | |
左は指定された長さの文字列を埋めます。 | |
文字列の左側から文字を削除します。 | |
文字列式に基づいてハッシュ値を返します。 | |
文字列のMD5値を返します。 | |
URLを解析し、URLの指定された部分を返します。 | |
URLを解析し、URLの複数の部分を返します。 | |
指定された位置から指定されたパターンに一致する部分文字列の数を返します。 | |
指定されたパターンに基づいて文字列をグループに分割し、指定されたグループの文字列を返します。 | |
文字列内の正規表現のパターンに一致するすべての部分文字列を検索し、その部分文字列を配列として返します。 | |
指定された位置から始まり、指定されたパターンと指定された回数一致する部分文字列の開始位置または終了位置を返します。 | |
部分文字列が指定されたパターンと指定された回数一致する場合、文字列を使用して別の文字列の部分文字列を置き換えます。 | |
指定された位置から指定された回数だけ指定されたパターンと一致する文字列の部分文字列を返します。 | |
指定された文字列を指定された回数繰り返す文字列を返します。 | |
文字列Bと一致する文字列aの部分文字列を別の部分文字列に置き換えます。 | |
文字列の文字を逆の順序で返します。 | |
右は指定された長さの文字列をパッドします。 | |
文字列の右側から文字を削除します。 | |
文字列をSOUNDEX型の文字列に変換します。 | |
スペース文字列を生成します。 | |
文字列が区切り文字で分割された後の配列を返します。 | |
区切り文字を使用して文字列を部分文字列に分割し、文字列の指定された部分の部分文字列を返します。 | |
文字列の指定された位置から指定された長さの部分文字列を返します。 文字列はstring型です。 | |
文字列の指定された位置から指定された長さの部分文字列を返します。 文字列はstring型またはBINARY型です。 | |
指定された区切り文字から文字列を切り捨てます。 | |
BOOLEAN、BIGINT、DECIMAL、またはDOUBLE型のデータをSTRING型に変換します。 | |
複雑なデータ型のデータをJSON文字列に変換します。 | |
文字列の大文字を小文字に変換します。 | |
文字列内の小文字を大文字に変換します。 | |
文字列Bに表示される文字列Aの部分を文字列Cに置き換えます。 | |
文字列の左右両側から文字を削除します。 | |
| |
入力文字列を |
注意事項
MaxCompute V2.0は追加機能を提供します。 使用する関数にMaxCompute V2.0データ型エディションでサポートされている新しいデータ型が含まれている場合は、SETステートメントを実行してMaxCompute V2.0データ型エディションを有効にする必要があります。 新しいデータ型には、TINYINT、SMALLINT、INT、FLOAT、VARCHAR、TIMESTAMP、およびBINARYが含まれます。
セッションレベル: MaxCompute V2.0データ型エディションを使用するには、実行するsql文の前に
set odps. SQL. type.system.odps2=true;
を追加し、一緒にコミットして実行する必要があります。プロジェクトレベル: プロジェクトの所有者は、プロジェクトの要件に基づいて、プロジェクトのMaxCompute V2.0データ型エディションを有効にできます。 設定は10〜15分後に有効になります。 プロジェクトレベルでMaxCompute V2.0データ型エディションを有効にするには、次のコマンドを実行します。
setproject odps.sql.type.system.odps2=true;
setproject
の詳細については、「プロジェクト操作」をご参照ください。 プロジェクトレベルでMaxCompute V2.0データ型エディションを有効にする際の注意事項の詳細については、「データ型エディション」をご参照ください。
制限事項
次の関数は英語の文字のみをサポートします。
TRIM、RTRIM、およびLTRIM: trimCharsパラメーターの値には、英字のみを使用できます。
REVERSE: この関数は、Hive互換データ型エディションの英字のみをサポートします。
SOUNDEX: この関数は英語の文字のみをサポートします。
TOLOWER: この関数は、文字列内の英語を小文字に変換するために使用されます。
TOUPPER: この関数は、文字列内の英字を大文字に変換するために使用されます。
INITCAP: この関数は、文字列の英語の各単語の最初の文字を大文字に、各単語の他の文字を小文字に変換するために使用されます。
ASCII
構文
bigint ascii(string <str>)
説明
strで指定した文字列の最初の文字のASCIIコードを返します。
パラメーター
str: 必須です。 STRING型の値。 入力値がBIGINT型、DOUBLE型、DECIMAL型、またはDATETIME型の場合、計算前に値は暗黙的にSTRING型の値に変換されます。
戻り値
BIGINT型の値が返されます。 戻り値は、次のルールによって異なります。
strの値がSTRING、BIGINT、DOUBLE、DECIMAL、またはDATETIME型でない場合、エラーが返されます。
strの値がnullの場合、nullが返されます。
例
例1: 文字列
abcde
の最初の文字のASCIIコードを返します。 例:-- The return value is 97. select ascii('abcde');
例2: 入力パラメーターをnullに設定します。 例:
-- The return value is null. select ascii(null);
CHAR_MATCHCOUNT
構文
bigint char_matchcount(string <str1>, string <str2>)
説明
str1に属し、str2に表示される文字数を返します。
パラメーター
str1およびstr2: 必須です。 STRING型の値。 値は有効なUTF-8文字列でなければなりません。 2つの文字列の比較中に無効な文字 (Unicodeでエンコードされていない文字) が見つかった場合、この関数は負の値を返します。
戻り値
BIGINT型の値が返されます。 str1またはstr2の値がnullの場合、nullが返されます。
例
例1: 文字列
aabc
に属し、文字列abcde
に表示される文字数を計算します。 例:-- The return value is 4. select char_matchcount('aabc','abcde');
例2: 入力パラメーターをnullに設定します。 例:
-- The return value is null. select char_matchcount(null,'abcde');
CHR
構文
string chr(bigint <ascii>)
説明
指定したASCIIコードを文字に変換します。
パラメーター
ascii: 必須です。 BIGINT型の値。 この値はASCIIコードを指定します。 有効な値: 0 ~ 128 入力値がSTRING型、DOUBLE型、またはDECIMAL型の場合、計算前に暗黙的にBIGINT型の値に変換されます。
戻り値
STRING型の値が返されます。 戻り値は、次のルールによって異なります。
asciiの値が有効範囲内にない場合、エラーが返されます。
asciiの値がBIGINT、STRING、DOUBLE、またはDECIMAL型でない場合、エラーが返されます。
asciiの値がnullの場合、nullが返されます。
例
例1: ASCIIコード
100
を文字に変換します。 例:-- The return value is d. select chr(100);
例2: 入力パラメーターをnullに設定します。 例:
-- The return value is null. select chr(null);
例3: 入力値はSTRING型の文字です。 例:
-- The input value is implicitly converted into a value of the BIGINT type before calculation. The return value is d. select chr('100');
CONCAT
構文
array<T> concat(array<T> <a>, array<T> <b>[,...]) string concat(string <str1>, string <str2>[,...])
説明
入力としての配列: 複数の配列のすべての要素を連結し、新しい配列を返します。
入力としての文字列: 複数の文字列を連結し、新しい文字列を返します。
パラメーター
aおよびb: 必須。 これらのパラメータは配列を指定します。
array<T>
のT
は、配列内の要素のデータ型を指定します。 要素は任意のデータ型にすることができます。 配列aの要素と配列bの要素は同じデータ型である必要があります。 null要素も操作に含まれます。str1およびstr2: 必須です。 STRING型の値。 入力値がBIGINT、DOUBLE、DECIMAL、またはDATETIME型の場合、計算前に暗黙的にSTRING型の値に変換されます。 入力値が他のデータ型の場合、エラーが返されます。
戻り値
ARRAY型の値が返されます。 入力配列の1つがnullの場合、nullが返されます。
STRING型の値が返されます。 入力パラメーターが設定されていない場合、または入力パラメーターがnullに設定されている場合は、nullが返されます。
例
例1:
配列 (10、20)
と配列 (20、-20)
のすべての要素を連結します。 例:-- The return value is [10, 20, 20, -20]. select concat(array(10, 20), array(20, -20));
例2: 入力配列の1つにnull要素が含まれています。 例:
-- The return value is [10, null, 20, -20]. select concat(array(10, null), array(20, -20));
例3: 入力配列の1つがnullです。 例:
-- The return value is null. select concat(array(10, 20), null);
例4: 文字列
aabc
とabcde
を連結します。 例:-- The return value is aabcabcde. select concat('aabc','abcde');
例5: 入力が空です。 例:
-- The return value is null. select concat();
例6: 入力文字列の1つがnullです。 例:
-- The return value is null. select concat('aabc', 'abcde', null);
CONCAT_WS
構文
string concat_ws(string <separator>, string <str1>, string <str2>[,...]) string concat_ws(string <separator>, array<string> <a>)
説明
指定された区切り文字を使用して、パラメーターまたは配列内の要素のすべての文字列を連結し、結果を返します。 この関数は、MaxCompute V2.0の追加関数です。
パラメーター
separator: 必須。 STRING型の区切り文字。
str1およびstr2: 少なくとも2つの文字列を指定する必要があります。 STRING型の値。 入力値がBIGINT型、DECIMAL型、DOUBLE型、またはDATETIME型の場合、計算前に値は暗黙的にSTRING型の値に変換されます。
a: 必須です。 このパラメーターは、配列を指定します。 配列内の要素はSTRING型です。
戻り値
STRING型またはSTRUCT型の値が返されます。 戻り値は、次のルールによって異なります。
str1またはstr2の値がSTRING、BIGINT、DECIMAL、DOUBLE、またはDATETIME型でない場合、エラーが返されます。
使用可能な入力パラメーターがない場合、または入力パラメーターがnullに設定されている場合は、nullが返されます。
例
例1: コロン (
:
) を使用して、文字列name
とhanmeimei
を連結します。 例:-- The return value is name:hanmeimei. select concat_ws(':','name','hanmeimei');
-
例2: 入力パラメーターをnullに設定します。 例:
-- The return value is null. select concat_ws(':','avg',null,'34');
例3:
colon (:)
を使用して、array('name', 'hanmeimei')
配列の要素を連結します。 例:-- The return value is name:hanmeimei. select concat_ws(':',array('name', 'hanmeimei'));
デコード
構文
string decode(binary <str>, string <charset>)
説明
charsetで指定された形式に基づいて文字列strをデコードします。
パラメーター
str: required。 デコードする文字列。 文字列はBINARY型です。
charset: 必須です。 STRING型のエンコード形式。 有効な値: UTF-8、UTF-16、UTF-16LE、UTF-16BE、ISO-8859-1、US-ASCII。
説明現在、ISO-8859-1およびUS-ASCII符号化フォーマットは、英字のみを符号化または復号化するために使用され得る。
戻り値
STRING型の値が返されます。 strまたはcharsetの値がnullの場合、戻り値はnullになります。
例
例1: UTF-8形式に基づいて文字列をエンコードおよびデコードします。 サンプル文:
-- Encode and decode the string. select decode(encode("中文样例", "UTF-8"), "UTF-8"); -- The following result is returned: +-----+ | _c0 | +-----+ | 中文样例 | +-----+
例2: 入力パラメーターをnullに設定します。 サンプル文:
-- The return value is null. select decode(encode("中文样例","UTF-8"), null); | _c0 | +-----+ | NULL | +-----+
エンコード
構文
binary encode(string <str>, string <charset>)
説明
文字列strをcharsetで指定した形式でエンコードします。
パラメーター
str: 必須です。 STRING型の値。 このパラメーターは、エンコードする文字列を指定します。
charset: 必須です。 STRING型の値。 このパラメーターは、エンコード形式を指定します。 有効な値: UTF-8、UTF-16、UTF-16LE、UTF-16BE、ISO-8859-1、US-ASCII。
戻り値
BINARY型の値が返されます。 strまたはcharsetの値がnullの場合、nullが返されます。
例
例1: 文字列
abc
をUTF-8
形式でエンコードします。 例:-- The return value is abc. select encode("abc", "UTF-8");
例2: 文字列
abc
をUTF-16BE
形式でエンコードします。 例:-- The return value is =00a=00b=00c. select encode("abc", "UTF-16BE");
例3: 入力パラメータがnullに設定されています。 例:
-- The return value is null. select encode("abc", null);
FIND_IN_SET
構文
bigint find_in_set(string <str1>, string <str2>)
説明
文字列str2内の部分文字列str1の位置を返します。 文字列str2の部分文字列はコンマ (,) で区切られます。 最初の位置は1です。
パラメーター
str1: 必須です。 STRING型の値。 このパラメータは、検索する部分文字列を指定します。
str2: 必須です。 STRING型の値。 このパラメーターは、部分文字列をコンマ (,) で区切った文字列を指定します。
戻り値
BIGINT型の値が返されます。 戻り値は、次のルールによって異なります。
str2にstr1が含まれていない場合、またはstr1にコンマ (,) が含まれている場合は、0が返されます。
str1またはstr2の値がnullの場合、nullが返されます。
例
例1: 文字列
abc,hello,ab,c
の部分文字列ab
の位置を返します。 例:-- The return value is 3. select find_in_set('ab', 'abc,hello,ab,c');
例2:
abc,hello,ab,c
の部分文字列hi
の位置を返します。 例:-- The return value is 0. select find_in_set('hi', 'abc,hello,ab,c');
例3: 入力パラメータがnullに設定されています。 例:
-- The return value is null. select find_in_set(null, 'abc,hello,ab,c');
FORMAT_NUMBER
構文
string format_number(float|double|decimal <expr1>, int <expr2>)
説明
expr1の値を、expr2で指定された形式を満たす文字列に変換します。
パラメーター
expr1: 必須です。 FLOAT、DOUBLE、またはDECIMAL型の値。 このパラメータは、フォーマットする式を指定します。
expr2: 必須です。 INT型の値。 有効な値: 0 ~ 340 このパラメータは、保持する小数点以下の桁数を指定します。 このパラメーターは、
#,###,###.#
と同様の形式で表すこともできます。 返される小数点以下の桁数は、このパラメーターの値によって異なります。
戻り値
STRING型の値が返されます。 戻り値は、次のルールによって異なります。
expr2
の値が0より大きく、340以下の場合は、指定された小数点以下の桁数に丸められた値が返されます。expr2
の値が0の場合、戻り値には整数部分のみが含まれ、小数点または小数部分は含まれません。expr2
の値が0未満または340
を超える場合、エラーが返されます。expr1またはexpr2が空またはnullに設定されている場合、nullが返されます。
例
例1: 指定された数値に基づいて、指定された形式で値を返します。 サンプル文:
-- The return value is 5.230. select format_number(5.230134523424545456,3); -- The return value is 12,332.123. select format_number(12332.123456, '#,###,###,###.###');
例2: 入力パラメーターが空またはnullに設定されています。 サンプル文:
-- The return value is null. select format_number('',3); -- The return value is null. select format_number(null,3);
FROM_CHARSET
構文
STRING FROM_CHARSET(binary <source>, string <source_charset>, [string <mode>])
説明
non-UTF-8エンコードされたバイナリデータをUTF-8エンコード文字列に変換し、後で計算します。
パラメーター
source: 必須です。 BINARY型の値。 このパラメータは、変換するバイナリデータを指定します。
source_charset: 必須です。 STRING型の値。 このパラメーターは、sourceで指定されたバイナリデータの元のエンコード形式を指定します。 有効な値: UTF-8、UTF-16、UTF-16LE、UTF-16BE、ISO-8859-1、US-ASCII、GB2312、GBK、GB18030。
mode: オプション。 STRING型の値。 このパラメーターは、FROM_CHARSET関数がsourceで指定されたバイナリデータを指定されたエンコード形式の文字列に変換するときに文字を変換できない場合の処理モードを指定します。 有効な値:
NONE: エラーを報告します。 処理は行われない。 デフォルト値です。
TRANSLIT: 指定されたエンコード形式の文字を同様の文字に置き換えます。
IGNORE: エラーを無視し、コマンドの実行を続行します。
戻り値
UTF-8エンコード形式のSTRING型の値が返されます。 入力パラメーターがnullまたは空の文字列の場合、戻り値は次の規則によって異なります。
入力パラメーターがnullの場合、nullが返されます。
入力パラメーターが空の文字列の場合、エラーが返されます。
例
例1: UTF-8エンコードされたバイナリデータをUTF-8エンコードされた文字列に変換します。
SELECT FROM_CHARSET(unhex('e58aa0e6b2b9e9949fe696a4e68bb70a'),'UTF-8', 'TRANSLIT');
次の応答が返されます。
+------------+ | _c0 | +------------+ | 加油锟斤拷 | +------------+
例2: GBKエンコードされたバイナリデータをUTF-8エンコードされた文字列に変換します。
SELECT FROM_CHARSET(unhex('b9feb9febac3a4ce'), 'GBK');
次の応答が返されます。
+------------+ | _c0 | +------------+ | 哈哈好の | +------------+
例3: 入力パラメーターがnullの場合、nullが返されます。
SELECT FROM_CHARSET(unhex('b9feb9febac3a4ce'), null);
次の応答が返されます。
+------------+ | _c0 | +------------+ | NULL | +------------+
FROM_JSON
構文
from_json(<jsonStr>, <schema>)
説明
JSON文字列jsonStrと出力形式スキーマに基づいて、ARRAY、MAP、またはSTRUCT型のデータを返します。
パラメーター
jsonStr: 必須です。 入力したJSON文字列。
schema: 必須です。 JSON文字列のスキーマ。 このパラメーターの値は、
array<bigint>
、map<string, array<string>>
、struct<a:int, b:double, 'C':map<string,string>>
など、テーブルを作成するステートメントと同じ形式である必要があります。説明構造体のキーは大文字と小文字を区別します。
struct <a:BIGINT, b:DOUBLE>
に相当するa BIGINT, b DOUBLE
の形式で構造体を指定することもできます。次の表に、JSONデータ型とMaxComputeデータ型の間のマッピングを示します。
JSONデータ型
MaxComputeデータ型
OBJECT
STRUCT、マップ、およびストリング
ARRAY
アレイとストリング
NUMBER
TINYINT、SMALLINT、INT、BIGINT、FLOAT、DOUBLE、DECIMAL、およびSTRING
BOOLEAN
ブーリアンとストリング
STRING
STRING、CHAR、VARCHAR、BINARY、DATE、およびDATETIME
NULL
すべてのタイプ
説明OBJECT型とARRAY型のJSON文字列は、可能な限り解析されます。 JSON文字列のデータ型がMaxComputeデータ型にマッピングされていない場合、JSON文字列は省略されます。 使いやすいように、すべてのJSONデータ型をMaxComputeでサポートされているSTRINGデータ型に変換できます。 NUMBER型のJSON文字列をFLOAT型、DOUBLE型、またはDECIMAL型の値に変換すると、値の精度が保証されません。 JSON文字列をstring型の値に変換してから、取得した値をFLOAT、DOUBLE、またはDECIMAL型の値に変換することをお勧めします。
戻り値
ARRAY、MAP、またはSTRUCTタイプの値が返されます。
例
例1: 特定のJSON文字列を特定のデータ型の値に変換します。 例:
-- The return value is {"a":1,"b":0.8}. select from_json('{"a":1, "b":0.8}', 'a int, b double'); -- The return value is {"time":"26/08/2015"}. select from_json('{"time":"26/08/2015"}', 'time string'); -- The return value is {"a":1,"b":0.8}. select from_json('{"a":1, "b":0.8}', 'a int, b double, c string'); -- The return value is [1,2,3]. select from_json('[1, 2, 3, "a"]', 'array<bigint>'); -- The return value is {"d":"v","a":"1","b":"[1,2,3]","c":"{}"}. select from_json('{"a":1,"b":[1,2,3],"c":{},"d":"v"}', 'map<string, string>');
例2:
map_keys
およびfrom_json
関数を使用して、JSON文字列のすべてのキーを取得します。 同じ目的でJSON_KEYSを使用することもできます。 例:-- The return value is ["a","b"]. select map_keys(from_json('{"a":1,"b":2}','map<string,string>'));
GET_JSON_OBJECT
使用上の注意
この関数は、JSONPathを使用して標準のJSON文字列から単一の文字列を抽出するために使用されます。 この関数は、次のデータ型の入力パラメーターをサポートします。
JSON型: 入力パラメータがJSON型の場合、標準のJSONPath式が使用されます。
STRING型: 入力パラメーターがSTRING型の場合、元のJSONPath式が使用されます。
この関数を使用する方法と使用法の注意点は、入力パラメーターのデータ型によって異なります。 このトピックでは、入力パラメーターがJSON型とSTRING型の場合にGET_JSON_OBJECT関数を使用する方法について説明します。
入力パラメータがJSON型である場合に使用されるJSONPath式と、入力パラメータがSTRING型である場合に使用されるJSONPath式は、異なる規則に準拠しています。 これは、非互換性の問題を引き起こし得る。
GET_JSON_OBJECT関数は、JSONPath式の構文をサポートしていません。
JSONデータ型の入力パラメーター
構文
string get_json_object(json <json>, string <json_path>)
説明
JSON PATHに基づいて、標準のJSON文字列から単一の文字列を抽出します。
パラメーター
json: 必須です。 単一の文字列を抽出するJSON文字列。
json_path: 必須です。 単一の文字列を抽出するJSONPath式。
戻り値
STRING型の値が返されます。
例
例1: JSON文字列からキーaに対応する値を抽出します。
select get_json_object(json '{"a":1, "b":2}', '$.a');
次の応答が返されます。
+-----+ | _c0 | +-----+ | 1 | +-----+
例2: JSON文字列からキーcに対応する値を抽出します。
select get_json_object(json '{"a":1, "b":2}', '$.c');
次の応答が返されます。
+-----+ | _c0 | +-----+ | NULL | +-----+
例3: 無効なJSONパスが指定されている場合、戻り値はNULLです。
select get_json_object(json '{"a":1, "b":2}', '$invalid_json_path');
次の応答が返されます。
+-----+ | _c0 | +-----+ | NULL | +-----+
STRINGデータ型の入力パラメーター
構文
string get_json_object(string <json>, string <path>)
説明
pathに基づいて、標準のJSON文字列から単一の文字列を抽出します。 この関数が呼び出されるたびに、元のデータが読み取られます。 したがって、繰り返される呼び出しはシステムパフォーマンスに影響を与え、コストを増加させます。 繰り返し呼び出しを防ぐために、UDTFで
GET_JSON_OBJECT
関数を使用できます。 詳細については、「MaxCompute組み込み関数とUDTFを使用したJSONログデータの変換」をご参照ください。パラメーター
json: 必須です。 STRING型の値。 このパラメーターは、標準のJSONオブジェクトを
{Key:Value, Key:Value,...}
の形式で指定します。 文字列に二重引用符 (") が含まれている場合は、2つのバックスラッシュ (\\) を使用して、抽出前に二重引用符 (") をエスケープします。 文字列に単一引用符 (') が含まれている場合は、単一のバックスラッシュ (\) を使用して、抽出前に単一引用符 (') をエスケープします。path: 必須です。 STRING型の値。 このパラメーターは、jsonパラメーターの値にpathを指定し、
$
で始まります。 pathパラメーターの詳細については、「LanguageManual UDF」をご参照ください。 ベストプラクティスの詳細については、「OSSからMaxComputeへのJSONデータの移行」をご参照ください。 異なる文字の意味:$
: ルートノードを示します。.
または['']
: 子ノードを示します。 MaxComputeは、を使用してJSONオブジェクトを解析します。
または['']
JSONオブジェクトのキーにピリオド (.) が含まれている場合は、[''] を使用できます。[]
([number]
): 0から始まる配列の下付き文字を示します。*
:[]
のワイルドカードを示します。 この文字をpathパラメーターで使用すると、配列全体が返されます。 アスタリスク (*
) はエスケープできません。
制限事項
MaxCompute V2.0のみが、pathパラメーターで
['']
を使用してデータを抽出できます。 [''] を使用するには、実行するステートメントの前にset odps.sql.udf.getjsonobj.new=true;
ステートメントを追加する必要があります。戻り値
jsonパラメーターが空または無効の場合、nullが返されます。
jsonの形式が有効で、pathが存在する場合、関連する文字列が返されます。
セッションに
flagodps.sql.udf.getjsonobj.new
パラメーターを指定して、この関数が値を返す方法を決定できます。set odps.sql.udf.getjsonobj.new=true;
ステートメントを実行すると、この関数は値を返すときに元の文字列を保持します。より標準的な関数の戻り動作になるため、この設定を使用することをお勧めします。 これにより、データ処理が容易になり、データ処理パフォーマンスが向上します。 この関数がJSON予約文字をエスケープするジョブがMaxComputeプロジェクトに存在する場合は、元のエスケープ操作を保持して、検証不足によるエラーを防ぐことを推奨します。 この関数は、値を返すときに次のルールに従います。
この設定では、戻り値はJSON文字列のままで、JSONデータとして解析できます。
REPLACE
またはREGEXP_REPLACE
関数を使用してバックスラッシュ (\) を置き換える必要はありません。JSONオブジェクトでは、重複キーが許可されます。 重複キーが存在する場合、データを解析することができる。
-- The return value is 1. select get_json_object('{"a":"1","a":"2"}', '$.a');
絵文字に対応するエンコードされた文字列がサポートされます。 ただし、DataWorksでは絵文字を入力できません。 DataWorksでは、Data Integrationなどのツールを使用して、絵文字に対応するエンコードされた文字列のみをMaxComputeに入力できます。 DataWorksは
GET_JSON_OBJECT
関数を使用してデータを処理します。-- The return value is an emoji. select get_json_object('{"a":"<Emoji>"}', '$.a');
出力結果はアルファベット順に表示されます。
-- The return value is {"b":"1","a":"2"}. select get_json_object('{"b":"1","a":"2"}', '$');
set odps.sql.udf.getjsonobj.new=false;
文を実行すると、この関数は値を返すときにJSON予約文字をエスケープします。 この関数は、値を返すときに次のルールに従います。改行 (\n) や引用符 (") などのJSON予約文字は、
'\n'
および'\" '
として表示されます。JSONオブジェクトの各キーは一意である必要があります。 重複するキーが存在する場合、データの解析に失敗する可能性があります。 例:
-- The return value is null. select get_json_object('{"a":"1","a":"2"}', '$.a');
絵文字に対応するエンコードされた文字列は解析できません。 例:
-- The return value is null. select get_json_object('{"a":"<Emoji>"}', '$.a');
出力結果はアルファベット順に表示されます。 例:
-- The return value is {"a":"2","b":"1"}. select get_json_object('{"b":"1","a":"2"}', '$');
説明2021年1月21日以降に作成されたMaxComputeプロジェクトの場合、
GET_JSON_OBJECT
関数は値を返すときに元の文字列を保持します。 2021年1月21日より前に作成されたMaxComputeプロジェクトの場合、GET_JSON_OBJECT
関数は値を返すときにJSON予約文字をエスケープします。 次の例は、GET_JSON_OBJECT
関数がMaxComputeプロジェクトで値を返す方法を決定するのに役立ちます。select get_json_object('{"a":"[\\"1\\"]"}', '$.a'); -- Return JSON reserved characters by using escape characters. [\"1\"] -- Return the original strings. ["1"]
アプリケーションを送信するか、DingTalkグループID 11782920を検索してMaxCompute開発者コミュニティDingTalkグループに参加し、MaxComputeテクニカルサポートエンジニアに
GET_JSON_OBJECT
関数を設定して元の文字列を保持するように依頼できます。 このように、セッションに対してset odps.sql.udf.getjsonobj.new=false; を頻繁に指定する必要はありません。
例
例1: JSONオブジェクト
src_json.json
から情報を抽出します。 例:-- The JSON string src_json.json contains the following content: +----+ json +----+ {"store": {"fruit":[{"weight":8,"type":"apple"},{"weight":9,"type":"pear"}], "bicycle":{"price":19.95,"color":"red"} }, "email":"amy@only_for_json_udf_test.net", "owner":"amy" } -- Extract the information of the owner field and return amy. select get_json_object(src_json.json, '$.owner') from src_json; -- Extract the information of the first array in the store.fruit field and return {"weight":8,"type":"apple"}. select get_json_object(src_json.json, '$.store.fruit[0]') from src_json; -- Extract the information of the non-existent field and return null. select get_json_object(src_json.json, '$.non_exist_key') from src_json;
例2: ARRAY型のJSONオブジェクトから情報を抽出します。 例:
-- The return value is 2222. select get_json_object('{"array":[["aaaa",1111],["bbbb",2222],["cccc",3333]]}','$.array[1][1]'); -- The return value is ["h0","h1","h2"]. set odps.sql.udf.getjsonobj.new=true; select get_json_object('{"aaa":"bbb","ccc":{"ddd":"eee","fff":"ggg","hhh":["h0","h1","h2"]},"iii":"jjj"}','$.ccc.hhh[*]'); -- The return value is ["h0","h1","h2"]. set odps.sql.udf.getjsonobj.new=false; select get_json_object('{"aaa":"bbb","ccc":{"ddd":"eee","fff":"ggg","hhh":["h0","h1","h2"]},"iii":"jjj"}','$.ccc.hhh'); -- The return value is h1. select get_json_object('{"aaa":"bbb","ccc":{"ddd":"eee","fff":"ggg","hhh":["h0","h1","h2"]},"iii":"jjj"}','$.ccc.hhh[1]');
例3: ピリオド
(.)
を含むJSONオブジェクトから情報を抽出します。 例:-- Create a table. create table mf_json (id string, json string); -- Insert data into the table. The key in the data contains a period (.). insert into table mf_json (id, json) values ("1", "{ \"China.beijing\":{\"school\":{\"id\":0,\"book\":[{\"title\": \"A\", \"price\": 8.95},{\"title\": \"B\",\"price\": 10.2}]}}}"); -- Insert data into the table. The key in the data does not contain a period (.). insert into table mf_json (id, json) values ("2", "{ \"China_beijing\":{\"school\":{\"id\":0,\"book\":[{\"title\": \"A\", \"price\": 8.95},{\"title\": \"B\",\"price\": 10.2}]}}}"); -- Query the value of id in the JSON object whose key is China.beijing. 0 is returned. Only [''] can be used to specify the key because the key contains a period (.). This way, MaxCompute can parse the key. select get_json_object(json, "$['China.beijing'].school['id']") from mf_json where id =1; -- Query the value of id in the JSON object whose key is China_beijing. 0 is returned. You can use one of the following statements: select get_json_object(json, "$['China_beijing'].school['id']") from mf_json where id =2; select get_json_object(json, "$.China_beijing.school['id']") from mf_json where id =2;
例4: jsonパラメーターが空または無効です。 例:
-- The return value is null. select get_json_object('','$.array[1][1]'); -- The return value is null. select get_json_object('"array":["aaaa",1111],"bbbb":["cccc",3333]','$.array[1][1]');
例5: JSON文字列のエスケープ 例:
set odps.sql.udf.getjsonobj.new=true; -- The return value is "1". select get_json_object('{"a":"\\"1\\"","b":"2"}', '$.a'); -- The return value is '1'. select get_json_object('{"a":"\'1\'","b":"2"}', '$.a');
INITCAP
構文
string initcap(<str>)
説明
strで指定した文字列を指定した形式の文字列に変換します。 この形式では、単語はタイトルケース内にあり、スペースで区切られています。 タイトルケースでは、各単語の最初の文字が大文字になり、各単語の他の文字は小文字になります。
パラメーター
str: 必須です。 STRING型の値。 このパラメータは、変換する文字列を指定します。
戻り値
文字列が返されます。 この文字列では、各単語の最初の文字が大文字になり、各単語の他の文字は小文字になります。
例
-- The return value is Odps Sql. SELECT initcap("oDps sql");
INSTR
構文
bigint instr(string <str1>, string <str2>[, bigint <start_position>[, bigint <nth_appearance>]])
説明
文字列str1内の部分文字列str2の位置を返します。
パラメーター
str1: 必須です。 STRING型の値。 このパラメーターは、検索する部分文字列を含む文字列を指定します。 入力値がBIGINT、DOUBLE、DECIMAL、またはDATETIME型の場合、計算前に暗黙的にSTRING型の値に変換されます。 入力値が別のデータ型の場合、エラーが返されます。
str2: 必須です。 STRING型の値。 このパラメータは、検索する部分文字列を指定します。 入力値がBIGINT、DOUBLE、DECIMAL、またはDATETIME型の場合、計算前に暗黙的にSTRING型の値に変換されます。 入力値が別のデータ型の場合、エラーが返されます。
start_position: オプションです。 BIGINT型の値。 入力値が別のデータ型の場合、エラーが返されます。 このパラメーターは、検索を開始するstr1内の文字の位置を指定します。 デフォルトの開始位置は、1とマークされた最初の文字です。 start_positionが負の値の場合、検索は文字列の末尾から先頭まで開始され、最後の文字は-1になります。
nth_appearance: オプション。 BIGINT型の値。0より大きい値です。 このパラメータは、n番目に文字列str1に表示される部分文字列str2の位置を指定します。 nnth_appearanceの値が別のデータ型であるか、0以下の場合、エラーが返されます。
戻り値
BIGINT型の値が返されます。 戻り値は、次のルールによって異なります。
str2がstr1に見つからない場合、値0が返されます。
str2が空の文字列の場合、照合は常に成功します。 たとえば、
select instr('abc','');
に対して値1が返されます。str1、str2、start_position、またはnth_appearanceの値がnullの場合、nullが返されます。
例
例1: 文字列
Tech on the net
内の部分文字列e
の位置を返します。 例:-- The return value is 2. select instr('Tech on the net', 'e');
例2: 文字列
Tech on the net
内の部分文字列on
の位置を返します。 例:-- The return value is 6. select instr('Tech on the net', 'on');
例3: 部分文字列
e
が3番目の文字から文字列Tech on the net
に表示される2番目のオカレンスの位置を返します。 例:-- The return value is 14. select instr('Tech on the net', 'e', 3, 2);
例4: 入力パラメータがnullに設定されています。 例:
-- The return value is null. select instr('Tech on the net', null);
IS_ENCODING
構文
boolean is_encoding(string <str>, string <from_encoding>, string <to_encoding>)
説明
入力文字列strをfrom_encodingで指定された文字セットからto_encodingで指定された文字セットに変換できるかどうかを指定します。 この関数は、入力文字列が文字化けしているかどうかを判断するためにも使用できます。 ほとんどの場合、from_encodingはUTF-8に設定され、to_encodingはGBKに設定されます。
パラメーター
str: 必須です。 STRING型の値。 空の文字列は任意の文字セットに属することができます。
_encodingから _encoding: 必須です。 STRING型の値。 from_encodingはソース文字セットを指定し、to_encodingはターゲット文字セットを指定します。
戻り値
BOOLEAN型の値が返されます。 戻り値は、次のルールによって異なります。
strを変換できる場合は、Trueが返されます。 それ以外の場合は、falseが返されます。
str、from_encoding、またはto_encodingの値がnullの場合、nullが返されます。
JSON_TUPLE
構文
string json_tuple(string <json>, string <key1>, string <key2>,...)
説明
(key1,key2,...)
などの一連の入力キーに基づいて、標準のJSON文字列から文字列を抽出します。パラメーター
json: 必須です。 STRING型の値。 このパラメーターは、標準のJSON文字列を指定します。
key: 必須です。 STRING型の値。 このパラメーターは、JSON文字列でJSONオブジェクトの
パス
を記述するために使用されます。 値はドル記号 ($) で始めることはできません。 一度に複数のキーを入力できます。 MaxComputeは、を使用してJSONオブジェクトを解析します。
または['']
JSONオブジェクトのキーにピリオド(.)
が含まれている場合、['']
を使用できます。
戻り値
STRING型の値が返されます。
説明jsonが空または無効の場合、nullが返されます。
keyが空、無効、またはJSON文字列に存在しない場合、nullが返されます。
jsonが有効でキーが存在する場合、関連する文字列が返されます。
この関数は、漢字を含むJSONデータを解析できます。
この関数は、ネストされたJSONデータを解析できます。
この関数は、ネストされた配列を含むJSONデータを解析できます。
解析アクションは、
set odps.sql.udf.getjsonobj.new=true;
を伴うGET_JSON_OBJECTの実行と同等です。 JSON文字列から複数のオブジェクトを取得するには、GET_JSON_OBJECT関数を複数回呼び出す必要があります。 その結果、JSON文字列は複数回解析されます。 JSON_TUPLE関数を使用すると、一度に複数のキーを入力でき、JSON文字列は1回だけ解析されます。 JSON_TUPLEはGET_JSON_OBJECTよりも効率的です。JSON_TUPLEは、ユーザー定義のテーブル値関数 (UDTF) です。 テーブルからいくつかの列を選択する場合は、LATERAL VIEW句とともにJSON_TUPLEを使用します。
KEYVALUE
構文
keyvalue(string <str>,[string <split1>,string <split2>,] string <key>) keyvalue(string <str>,string <key>)
説明
文字列strをsplit1でキーと値のペアに分割し、split2でキーと値のペアを分離し、指定されたキーの値を返します。
パラメーター
str: 必須です。 STRING型の値。 このパラメータは、分割する文字列を指定します。
split1およびsplit2: オプション。 STRING型の値。 これらのパラメーターは、ソース文字列を分割するための区切り文字として使用される文字列を指定します。 2つのパラメーターを指定しない場合、split1のデフォルト値はセミコロン (
;
) 、split2のデフォルト値はコロン (:
) です。 ソース文字列がsplit1で分割された後に取得されたキーと値のペアに、split2で指定された複数の区切り文字が含まれている場合、返される結果は未定義です。key: 必須です。 STRING型の値。 ソース文字列がsplit1とsplit2で順番に分割された後、keyに対応する値が返されます。
戻り値
STRING型の値が返されます。 戻り値は、次のルールによって異なります。
split1またはsplit2の値がnullの場合、nullが返されます。
strまたはkeyの値がnullの場合、またはkeyが一致しない場合、nullが返されます。
複数のキーと値のペアが一致する場合、最初に一致したキーに対応する値が返されます。
例
例1: 文字列0:1\;1:2をキーと値のペアに分割し、キー
1
に対応する値を返します。 サンプル文:-- The return value is 2. select keyvalue('0:1/;1:2', 1);
split1およびsplit2パラメーターは指定されていません。 split1のデフォルト値はセミコロン (
;
) で、split2のデフォルト値はコロン (:
) です。ソース文字列がsplit1で分割された後、キーと値のペア
0:1\,1:2
が返されます。 キーと値のペアがsplit2で分割されると、次のキーと値が生成されます。0 1/ 1 2
キー1に対応する値2が返されます。
例2: 文字列の分割
\;decreaseStore:1 \;xcard:1 \;isB2C:1 \;tf:21910\;cart:1 \;shipping:2\;pf:0\;market:shoes\;instPayAmount:0\;
バックスラッシュとセミコロン (\;
) 、コロン (:
) に基づいてキーから値を分離し、キーtf
に対応する値を返します。 例:-- The return value is 21910. select keyvalue("\;decreaseStore:1\;xcard:1\;isB2C:1\;tf:21910\;cart:1\;shipping:2\;pf:0\;market:shoes\;instPayAmount:0\;","\;",":","tf");
ソース文字列
\;decreaseStore:1 \;xcard:1 \;isB2C:1 \;tf:21910\;cart:1 \;shipping:2\;pf:0\;market:shoes\;instPayAmount:0\;
の後に、バックスラッシュとセミコロン (\;
) に基づいて分割されます。decreaseStore:1, xcard:1, isB2C:1, tf:21910, cart:1, shipping:2, pf:0, market:shoes, instPayAmount:0
キーと値のペアがコロン (
:
) に基づいて分離されると、次のキーと値が生成されます。decreaseStore 1 xcard 1 isB2C 1 tf 21910 cart 1 shipping 2 pf 0 market shoes instPayAmount 0
キー
tf
に対応する値21910が返されます。
KEYVALUE_TUPLE
構文
KEYVALUE_TUPLE(str, split1, split2, key1, key2, ..., keyN)
説明
文字列strをsplit1でキーと値のペアに分割し、split2でキーと値のペアを分離してから、keysの値を返します。
パラメーター
str: 必須です。 STRING型の値。 このパラメータは、分割する文字列を指定します。
split1およびsplit2: 必須です。 STRING型の値。 これらのパラメーターは、ソース文字列を分割するための区切り文字として使用される文字列を指定します。 ソース文字列がsplit1で分割された後に取得されたキーと値のペアに、split2で指定された複数の区切り文字が含まれている場合、返される結果は未定義です。
key: 必須です。 STRING型の値。 ソース文字列がsplit1とsplit2で順番に分割された後、keyに対応する値が返されます。
戻り値
STRING型の値が返されます。 戻り値は、次のルールによって異なります。
split1またはsplit2の値がnullの場合、nullが返されます。
strまたはkeyの値がnullの場合、またはkeyが一致しない場合、nullが返されます。
例
-- Create a table. create table mf_user ( user_id string, user_info string ); -- Insert data into the table. insert into mf_user values('1','age:18;genda:f;address:abc'),('2','age:20;genda:m;address:bcd'); -- Query the data that you inserted. SELECT user_id, KEYVALUE(user_info,';',':','age') as age, KEYVALUE(user_info,';',':','genda') as genda, KEYVALUE(user_info,';',':','address') as address FROM mf_user; -- It is equivalent to the KEYVALUE clause. SELECT user_id, age, genda, address FROM mf_user LATERAL VIEW KEYVALUE_TUPLE(user_info,';', ':','age','genda','address') ui AS age,genda,address;
次の応答が返されます。
+------------+------------+------------+------------+ | user_id | age | genda | address | +------------+------------+------------+------------+ | 1 | 18 | f | abc | | 2 | 20 | m | bcd | +------------+------------+------------+------------+
LENGTH
構文
bigint length(string <str>)
説明
文字列strの長さを返します。
パラメーター
str: 必須です。 STRING型の値。 入力値がBIGINT型、DOUBLE型、DECIMAL型、またはDATETIME型の場合、計算前に値は暗黙的にSTRING型の値に変換されます。
戻り値
BIGINT型の値が返されます。 戻り値は、次のルールによって異なります。
strの値がSTRING、BIGINT、DOUBLE、DECIMAL、またはDATETIME型でない場合、エラーが返されます。
strの値がnullの場合、nullが返されます。
strの値がUTF-8エンコードされていない場合、-1が返されます。
例
例1: 文字列の長さ
Tech on the net
を返します。 例:-- The return value is 15. select length('Tech on the net');
例2: 入力パラメーターをnullに設定します。 例:
-- The return value is null. select length(null);
LENGTHB
構文
bigint lengthb(string <str>)
説明
strで指定した文字列の長さをバイト単位で返します。
パラメーター
str: 必須です。 STRING型の値。 入力値がBIGINT型、DOUBLE型、DECIMAL型、またはDATETIME型の場合、計算前に値は暗黙的にSTRING型の値に変換されます。
戻り値
BIGINT型の値が返されます。 戻り値は、次のルールによって異なります。
strの値がSTRING、BIGINT、DOUBLE、DECIMAL、またはDATETIME型でない場合、エラーが返されます。
strの値がnullの場合、nullが返されます。
例
例1: 文字列
Tech on the net
の長さをバイト単位で返します。 例:-- The return value is 15. select lengthb('Tech on the net');
例2: 入力パラメーターをnullに設定します。 例:
-- The return value is null. select lengthb(null);
ロケート
構文
bigint locate(string <substr>, string <str>[, bigint <start_pos>])
説明
文字列strでの部分文字列substrの位置を返します。 start_posを使用して、検索の開始位置を指定できます。 値は 1 から始まります。
パラメーター
substream: 必須です。 STRING型の値。 このパラメータは、検索する部分文字列を指定します。
str: 必須です。 STRING型の値。 このパラメーターは、部分文字列を検索する文字列を指定します。
start_pos: オプションです。 BIGINT型の値。 このパラメータは、検索の開始位置を指定します。
戻り値
BIGINT型の値が返されます。 戻り値は、次のルールによって異なります。
strにsubstrumが見つからない場合は、0が返されます。
strまたはsubstrの値がnullの場合、nullが返されます。
start_posの値がnullの場合、0が返されます。
例
例1: string
abchelloabc
内のstringab
の位置を返します。 例:-- The return value is 1. select locate('ab', 'abchelloabc');
例2: 文字列
abchelloabc
内の文字列hi
の位置を返します。 例:-- The return value is 0. select locate('hi', 'abc,hello,ab,c');
例3: start_posの値をnullに設定します。 例:
-- The return value is 0. select locate('ab', 'abhelloabc', null);
LPAD
構文
string lpad(string <str1>, int <length>, string <str2>)
説明
指定された長さにstr2で左パッドstr1。 この関数は、MaxCompute V2.0の追加関数です。
パラメーター
str1: 必須です。 STRING型の値。 このパラメータは、padを左にする文字列を指定します。
length: 必須。 INT型の値。 このパラメータは、左パディングに使用される文字数を指定します。
str2: 必須です。 このパラメータは、別の文字列を右パディングするために使用する文字列を指定します。
戻り値
STRING型の値が返されます。 戻り値は、次のルールによって異なります。
lengthの値がstr1の文字数より小さい場合、この関数はstr1を左から切り捨てて、lengthで指定された文字数の文字列を取得します。
lengthが0に設定されている場合、空の文字列が返されます。
使用可能な入力パラメーターがない場合、または入力パラメーターがnullに設定されている場合は、nullが返されます。
例
例1: 文字列
abcdefgh
を文字列12
で左パッドして、長さ10文字の文字列を取得します。 例:-- The return value is 12abcdefgh. select lpad('abcdefgh', 10, '12');
例2: 文字列
abcdefgh
を文字列12
で左パッドして、長さ5文字の文字列を取得します。 例:-- The return value is abcde. select lpad('abcdefgh', 5, '12');
例3: lengthの値は0です。 例:
-- The return value is an empty string. select lpad('abcdefgh' ,0, '12');
例4: 入力パラメータがnullに設定されています。 例:
-- The return value is null. select lpad(null ,0, '12');
LTRIM
構文
string ltrim(string <str>[, <trimChars>]) string trim(leading [<trimChars>] from <str>)
説明
次の项目に注意してください:
trimCharsを指定しない場合、左側のスペースはデフォルトで削除されます。
trimCharsを指定した場合、trimCharsで指定された1つ以上の文字で構成される部分文字列は、strで指定された文字列の左側から削除されます。
パラメーター
str: 必須です。 STRING型の値。 このパラメータは、文字が削除される左側の文字列を指定します。 入力値がBIGINT型、DECIMAL型、DOUBLE型、またはDATETIME型の場合、計算前に値は暗黙的にSTRING型の値に変換されます。
trimChars: オプション。 STRING型の値。 削除する文字を指定します。
戻り値
STRING型の値が返されます。 戻り値は、次のルールによって異なります。
strの値がSTRING、BIGINT、DOUBLE、DECIMAL、またはDATETIME型でない場合、エラーが返されます。
strまたはtrimCharsの値がnullの場合、nullが返されます。
例
例1: 文字列
yxTxyomxx
の左側からスペースを削除します。 サンプル文:-- The return value is yxTxyomxx. select ltrim(' yxTxyomxx '); -- The preceding statement is equivalent to the following statement: select trim(leading from ' yxTxyomxx ');
例2:
xy
コレクション内の1つ以上の文字で構成される部分文字列を、文字列yxTxyomxx
の左側から削除します。-- The return value is Txyomxx. If x or y appears on the left side, it is removed. select ltrim('yxTxyomxx', 'xy'); -- The preceding statement is equivalent to the following statement: select trim(leading 'xy' from 'yxTxyomxx');
例3: 入力パラメーターがnullに設定されています。 サンプル文:
-- The return value is null. select ltrim(null); select ltrim('yxTxyomxx', null);
MASK_HASH
構文
mask_hash(<expr>)
説明
exprで指定された文字列式を使用して計算されたハッシュ値を返します。 文字列式によって計算された値が同じ場合、コンシステントハッシュ値が返されます。
パラメーター
expr: 必須です。 ハッシュ値の計算に使用される文字列式。 STRING、CHAR、VARCHAR、およびBINARYデータ型がサポートされています。
戻り値
文字列式を使用して計算されたハッシュ値が返されます。 ハッシュ値の長さは64バイトです。 Hive互換データ型エディションでは、文字列以外の式が使用されている場合、値
null
が返されます。例
-- A hash value is returned if the string abc is used. select mask_hash("abc"); -- The following result is returned: +------------+ | _c0 | +------------+ | ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad | +------------+ -- The value null is returned if a non-string expression is used. select mask_hash(100); -- The following result is returned: +------------+ | _c0 | +------------+ | NULL | +------------+
MD5
構文
string md5(string <str>)
説明
strで指定した文字列のMD5値を返します。
パラメーター
str: 必須です。 STRING型の値。 入力値がBIGINT、DOUBLE、DECIMAL、またはDATETIME型の場合、計算前に暗黙的にSTRING型の値に変換されます。
戻り値
STRING型の値が返されます。 戻り値は、次のルールによって異なります。
strの値がSTRING、BIGINT、DOUBLE、DECIMAL、またはDATETIME型でない場合、エラーが返されます。
strの値がnullの場合、nullが返されます。
例
例1: 文字列
Tech on the net
のMD5値を返します。 例:-- The return value is ddc4c4796880633333d77a60fcda9af6. select md5('Tech on the net');
例2: 入力パラメーターをnullに設定します。 例:
-- The return value is null. select md5(null);
PARSE_URL
構文
string parse_url(string <url>, string <part>[, string <key>])
説明
urlを解析し、partで指定した値に基づいて情報を抽出します。
パラメーター
url: 必須です。 STRING型の値。 このパラメータはURLを指定します。 URLが無効な場合、エラーが返されます。
part: 必須です。 STRING型の値。 有効な値: HOST、PATH、QUERY、REF、PROTOCOL、AUTHORITY、FILE、USERINFO。 このパラメーターの値は大文字と小文字を区別しません。
key: オプション。 partがQUERYに設定されている場合、この関数はkeyに対応する値を返します。
戻り値
STRING型の値が返されます。 戻り値は、次のルールによって異なります。
url、part、またはkeyの値がnullの場合、nullが返されます。
partの値が無効な場合、エラーが返されます。
例
-- The return value is example.com. select parse_url('file://username:password@example.com:8042/over/there/index.dtb?type=animal&name=narwhal#nose', 'HOST'); -- The return value is /over/there/index.dtb. select parse_url('file://username:password@example.com:8042/over/there/index.dtb?type=animal&name=narwhal#nose', 'PATH'); -- The return value is animal. select parse_url('file://username:password@example.com:8042/over/there/index.dtb?type=animal&name=narwhal#nose', 'QUERY', 'type'); -- The return value is nose. select parse_url('file://username:password@example.com:8042/over/there/index.dtb?type=animal&name=narwhal#nose', 'REF'); -- The return value is file. select parse_url('file://username:password@example.com:8042/over/there/index.dtb?type=animal&name=narwhal#nose', 'PROTOCOL'); -- The return value is username:password@example.com:8042. select parse_url('file://username:password@example.com:8042/over/there/index.dtb?type=animal&name=narwhal#nose', 'AUTHORITY'); -- The return value is username:password. select parse_url('file://username:password@example.com:8042/over/there/index.dtb?type=animal&name=narwhal#nose', 'USERINFO');
PARSE_URL_TUPLE
構文
string parse_url_tuple(string <url>, string <key1>, string <key2>,...)
説明
urlを解析し、key1やkey2などの入力キーのグループで指定された文字列を抽出します。 PARSE_URL_TUPLE関数は、PARSE_URL関数に似ています。 ただし、PARSE_URL_TUPLE関数は、複数のキーに対応する文字列を同時に抽出できるため、パフォーマンスが向上します。
パラメーター
url: 必須です。 STRING型の値。 このパラメータはURLを指定します。 URLが無効な場合、エラーが返されます。
key1およびkey2: 必須です。 STRING型の値。 これらのパラメータは、抽出する文字列に対応するキーを指定します。 有効な値:
HOST: ホストアドレスを示します。ドメイン名またはIPアドレスを指定できます。
PATH: サーバー内のネットワークリソースのパスを示します。
QUERY: クエリする文字列を示します。
REF: ポインタをURLの上に移動すると表示されるURLアノテーションを示します。
PROTOCOL: プロトコルタイプを示します。
AUTHORITY: サーバーのドメイン名またはIPアドレス、ポート番号、ユーザー名やパスワードなどのユーザー認証情報を示します。
FILE: サーバー内のネットワークリソースのパスと、照会するコンテンツを示します。 FILEはPATHとQUERYで構成されています。
USERINFO: ユーザ認証情報を示します。
QUERY:<KEY>: クエリ文字列で指定されたキーの値を示します。
これらのパラメータの値は大文字と小文字を区別しません。 前の値以外の値を指定した場合は、エラーが返されます。
戻り値
STRING型の値が返されます。 urlまたはkeyの値がnullの場合、エラーが返されます。
例
file:// username:password@example.com:8042/over/there/index.dtb?type=animal&name=narwhal#nose
からキーに対応する文字列を抽出します。 例:select parse_url_tuple('file://username:password@example.com:8042/over/there/index.dtb?type=animal&name=narwhal#nose', 'HOST', 'PATH', 'QUERY', 'REF', 'PROTOCOL', 'AUTHORITY', 'FILE', 'USERINFO', 'QUERY:type', 'QUERY:name') as (item0, item1, item2, item3, item4, item5, item6, item7, item8, item9);
次の応答が返されます。
+------------+------------+------------+------------+------------+------------+------------+------------+------------+------------+ | item0 | item1 | item2 | item3 | item4 | item5 | item6 | item7 | item8 | item9 | +------------+------------+------------+------------+------------+------------+------------+------------+------------+------------+ | example.com | /over/there/index.dtb | type=animal&name=narwhal | nose | file | username:password@example.com:8042 | /over/there/index.dtb?type=animal&name=narwhal | username:password | animal | narwhal | +------------+------------+------------+------------+------------+------------+------------+------------+------------+------------+
REGEXP_COUNT
構文
bigint regexp_count(string <source>, string <pattern>[, bigint <start_position>])
説明
start_positionで指定された開始位置からsource文字列で指定されたpatternに一致する部分文字列の数を返します。
パラメーター
source: 必須です。 STRING型の値。 このパラメーターは、検索する部分文字列を含む文字列を指定します。 値が文字列でない場合、エラーが返されます。
pattern: 必須です。 STRING型または正規表現の定数。 このパラメーターは、指定した部分文字列が一致する必要があるパターンを指定します。 正規表現の詳細については、「RLIKE」をご参照ください。 patternが空の文字列または別のデータ型の場合、エラーが返されます。
start_position: オプションです。 BIGINT型の定数。 このパラメーターの値は0より大きくなければなりません。 値が別のデータ型の場合、または0以下の場合、エラーが返されます。 このパラメーターを指定しない場合、デフォルト値は1です。 この値は、検索がソース文字列の最初の文字から始まることを示します。
戻り値
BIGINT型の値が返されます。 戻り値は、次のルールによって異なります。
一致する部分文字列がない場合、0が返されます。
source、pattern、またはstart_positionの値がnullの場合、nullが返されます。
例
例1: 指定した位置から指定したパターンに一致する
ababc
の部分文字列の数を計算します。 サンプル文:-- The return value is 1. select regexp_count('abababc', 'a.c'); -- The return value is 2. select regexp_count('abababc', '[[:alpha:]]{2}', 3);
例2: 入力パラメーターをnullに設定します。 例:
-- The return value is null. select regexp_count('abababc', null);
例3: JSON文字列
{"account_id":123456789,"account_name":"allen","location":"hangzhou","bill":100}
のコロン (:)
の数を計算します。 サンプル文: Sample statement:-- The return value is 4. select regexp_count('{"account_id":123456789,"account_name":"allen","location":"hangzhou","bill":100}',':');
REGEXP_EXTRACT
構文
string regexp_extract(string <source>, string <pattern>[, bigint <groupid>])
説明Hiveと互換性のあるデータ型のバージョンでは、
REGEXP_EXTRACT
関数はJava regex仕様に従います。 ただし、データ型バージョン1.0および2.0では、MaxComputeの仕様に従います。説明
指定されたパターンに基づいてソース文字列をグループに分割し、groupidで指定されたn番目のグループの文字列を返します。
パラメーター
source: 必須です。 STRING型の値。 このパラメータは、分割する文字列を指定します。
pattern: 必須です。 STRING型または正規表現の定数。 このパラメーターは、指定した部分文字列が一致する必要があるパターンを指定します。 正規表現の詳細については、「RLIKE」をご参照ください。
groupid: オプション。 BIGINT型の定数。 このパラメーターの値は0以上である必要があります。
説明データはUTF-8形式で保存されます。 漢字は16進数で表すことができます。 これらは、[\\x{4e00 },\\ x{9fa5}] の範囲でエンコードされます。
戻り値
STRING型の値が返されます。 戻り値は、次のルールによって異なります。
patternが空の文字列の場合、またはpatternにグループが指定されていない場合は、エラーが返されます。
groupidの値がBIGINT型でないか、0未満の場合、エラーが返されます。 このパラメーターを指定しない場合、デフォルト値は1です。 この値は、最初のグループの文字列が返されることを示します。 groupidが0に設定されている場合、patternに一致するすべての部分文字列が返されます。
source、pattern、またはgroupidの値がnullの場合、nullが返されます。
REGEXP_EXTRACT_ALL
構文
array<T> regexp_extract_all(string <source>, string <pattern>[,bigint <group_id>])
説明
文字列内の正規表現のパターンに一致するすべての部分文字列を検索し、その部分文字列を配列として返します。
パラメーター
source: 必須です。 STRING型の値。 このパラメーターは、分析する文字列を指定します。
pattern: 必須です。 STRING型の値。 このパラメーターは、部分文字列を一致させるパターンを指定します。 このパラメーターには、STRING型の定数または正規表現を使用できます。 正規表現の詳細については、「RLIKE」をご参照ください。
group_id: オプション。 BIGINT型の値。 このパラメーターには、パターンの照合に使用されるグループのIDを指定します。 このパラメーターの値は、
0
以上である必要があります。 このパラメーターを指定しない場合、IDが1
のグループがパターンと一致するために使用されます。 このパラメーターを0
に設定すると、すべてのグループがパターンに一致するように使用されます。
戻り値
ARRAY型の値が返されます。 group_idを指定した場合、group_idで指定されたグループのすべての一致する結果で構成される配列が返されます。 group_idを指定しない場合、IDが
1
のグループのすべての一致する結果で構成される配列が返されます。例
group_idを指定しない場合、idが1のグループのすべての一致する結果で構成される配列が返されます。 サンプル文:
SELECT regexp_extract_all('100-200, 300-400', '(\\d+)-(\\d+)');
次の応答が返されます。
+------------+ | _c0 | +------------+ | [100,300] | +------------+
group_idを
2
に設定すると、idが2のグループのすべての一致する結果で構成される配列が返されます。 サンプル文:SELECT regexp_extract_all('100-200, 300-400', '(\\d+)-(\\d+)',2);
次の応答が返されます。
+------------+ | _c0 | +------------+ | [200,400] | +------------+
REGEXP_INSTR
構文
bigint regexp_instr(string <source>, string <pattern>[,bigint <start_position>[, bigint <occurrence>[, bigint <return_option>]]])
説明
start_positionで指定された開始位置からソース文字列で、occurrenceで指定されたn番目のオカレンスでpatternと一致する部分文字列の開始位置または終了位置を返します。
パラメーター
source: 必須です。 STRING型の値。 このパラメータは、ソース文字列を指定します。
pattern: 必須です。 STRING型または正規表現の定数。 このパラメーターは、指定した部分文字列が一致する必要があるパターンを指定します。 正規表現の詳細については、「RLIKE」をご参照ください。 patternが空の文字列の場合、エラーが返されます。
start_position: オプションです。 BIGINT型の定数。 このパラメータは、検索の開始位置を指定します。 このパラメーターを指定しない場合、デフォルト値1が使用されます。
occurrence: オプション。 BIGINT型の定数。 このパラメーターを指定しない場合、デフォルト値1が使用されます。 この値は、部分文字列が最初の検索でパターンと一致する位置を示します。
return_option: オプション。 BIGINT型の定数。 このパラメーターは、指定したパターンに一致する部分文字列の開始位置または終了位置を返すかどうかを指定します。 有効な値: 0と1。 このパラメーターを指定しない場合は、デフォルト値0が使用されます。 このパラメーターが無効な数値または別のデータ型の値に設定されている場合、エラーが返されます。 値0は、指定されたパターンに一致する部分文字列の開始位置が返されることを示します。 値1は、指定されたパターンに一致する部分文字列の終了位置が返されることを示します。
戻り値
BIGINT型の値が返されます。 戻り値は、ソース文字列の一致する部分文字列のreturn_optionで指定された開始位置または終了位置です。 戻り値は、次のルールによって異なります。
patternが空の文字列の場合、エラーが返されます。
start_positionまたはoccurrenceの値がBIGINT型でないか、0以下の場合、エラーが返されます。
source、pattern、start_position、occurrence、またはreturn_optionの値がnullの場合、nullが返されます。
例
例1:
3
番目の文字からi lov e www.taobao.com
文字列の2
番目の出現でo[[:alpha:]]{1}
と一致する部分文字列の開始位置を返します。 例:-- The return value is 14. select regexp_instr('i love www.taobao.com', 'o[[:alpha:]]{1}', 3, 2);
例2:
3
番目の文字からi lov e www.taobao.com
文字列の2
番目の出現でo[[:alpha:]]{1}
に一致する部分文字列の終了位置を返します。 例:-- The return value is 16. select regexp_instr('i love www.taobao.com', 'o[[:alpha:]]{1}', 3, 2, 1);
例3: 入力パラメータがnullに設定されています。 例:
-- The return value is null. select regexp_instr('i love www.taobao.com', null, 3, 2);
REGEXP_REPLACE
構文
string regexp_replace(string <source>, string <pattern>, string <replace_string>[, bigint <occurrence>])
説明Hiveと互換性のあるデータ型のバージョンでは、
REGEXP_REPLACE
関数はJava regex仕様に従います。 ただし、データ型バージョン1.0および2.0では、MaxComputeの仕様に従います。説明
replace_stringで指定された文字列を使用して、source文字列のoccurrenceで指定されたn番目のオカレンスで、特定のパターンに一致する部分文字列を置き換え、結果を返します。
パラメーター
source: 必須です。 STRING型の値。 このパラメータには、置き換える3つの文字列を指定します。
pattern: 必須です。 STRING型または正規表現の定数。 このパラメーターは、指定した部分文字列が一致する必要があるパターンを指定します。 正規表現の詳細については、「RLIKE」をご参照ください。 patternが空の文字列の場合、エラーが返されます。
replace_string: 必須です。 STRING型の値。 この値は、パターンに一致する文字列を置き換えるために使用されます。
説明replace_stringが空の文字列の場合、関数がpatternで指定された値と一致する文字列を削除した後に値が返されます。
replace_stringの値には、後方参照 \nを含めることができます。 replace_stringの値に逆方向参照が含まれている場合、patternで指定されたn番目のキャプチャグループと一致する部分文字列が挿入されます。 nは1から9までの数字です。 replace_stringの値に後方参照 \0が含まれている場合、パターン全体に一致する部分文字列が挿入されます。 バックスラッシュ (\) はエスケープする必要があります。 たとえば、replace_stringの値に後方参照 \1が含まれている場合、後方参照のバックスラッシュ (\) をエスケープする必要があり、後方参照 \1は (\\1) と表されます。 生の文字列R'(\1)'を使用して、後方参照 \1を表すこともできます。
occurrence: オプション。 BIGINT型の定数。0以上でなければなりません。 このパラメーターの値は、occurrenceで指定されたn番目のオカレンスで指定されたパターンと一致する文字列がreplace_stringに置き換えられることを示します。 このパラメーターを0に設定すると、指定したパターンに一致するすべての部分文字列が置き換えられます。 他のデータ型の場合、または0未満の場合はエラーが返されます。 デフォルト値:0
戻り値
STRING型の値が返されます。 戻り値は、次のルールによって異なります。
参照グループが存在しない場合、返される結果は未定義です。
replace_stringの値がnullで、部分文字列が指定のパターンと一致する場合、nullが返されます。
replace_stringの値がnullで、指定されたパターンと一致する部分文字列がない場合、元の文字列が返されます。
source、pattern、またはoccurrenceの値がnullの場合、nullが返されます。
例
例1: 指定したパターンに基づいて文字列を置き換えます。 サンプル文:
-- The return value is Abcd. select regexp_replace("abcd", "a", "A", 0); -- The return value is bcd. select regexp_replace("abcd", "a", "", 0); -- The return value is 19700101. select regexp_replace("1970-01-01", "-", "", 0); -- The return value is abc. select regexp_replace("a1b2c3", "[0-9]", "", 0); -- The return value a1b2c. select regexp_replace("a1b2c3", "[0-9]", "", 3);
例2:
(\\1)\\2-\\3
を使用して、123.456.7890
文字列内で一致するすべての部分文字列([[:digit:]]{3})\\.([[:digit:]]{3})
を置き換えます。 例:-- The return value is (123)456-7890. select regexp_replace('123.456.7890', '([[:digit:]]{3})\\.([[:digit:]]{3})\\.([[:digit:]]{4})', '(\\1)\\2-\\3', 0);
例3:
abcd
文字列の指定されたパターンと一致する部分文字列を置き換えます。 サンプル文:-- The return value is a b c d. select regexp_replace('abcd', '(.)', '\\1 ', 0); -- The return value is a bcd. select regexp_replace('abcd', '(.)', '\\1 ', 1); -- The return value is d. select regexp_replace("abcd", "(.*)(.)$", "\\2", 0);
例4: url_setテーブルのURL列のデータは
www.simple@xxx.com
形式で、各行のwww.simple@xxx.comのxxx
が異なります。www
以降のすべての文字をURL列のデータの文字列に置き換えます。 例:-- The return value is wwwtest. select regexp_replace(url,'(www)(.*)','wwwtest',0) from url_set;
例5: 入力パラメータがnullに設定されています。 例:
-- The return value is null. select regexp_replace('abcd', '(.)', null, 0);
例6: 参照するグループが存在しません。 サンプル文:
-- Only one group is defined in the pattern, and the referenced group does not exist. -- We recommend that you do not use this function in this way. The result of referencing a nonexistent group is not defined. regexp_replace("abcd", "(.)", "\\2", 0) = "" or "abcd" -- The referenced group is defined in the pattern. Therefore, "\1" references a nonexistent group. -- We recommend that you do not use this function in this way. The result of referencing a nonexistent group is not defined. regexp_replace("abcd", "a", "\\1", 0) = "bcd" or "abcd"
REGEXP_SUBSTR
構文
string regexp_substr(string <source>, string <pattern>[, bigint <start_position>[, bigint <occurrence>]])
説明
start_positionで指定された開始位置からソース文字列で、occurrenceで指定されたn番目のオカレンスで指定されたパターンと一致する文字列を返します。
パラメーター
source: 必須です。 STRING型の値。 このパラメーターは、検索する部分文字列を指定します。
pattern: 必須です。 STRING型または正規表現の定数。 このパラメーターは、指定した部分文字列が一致する必要があるパターンを指定します。 正規表現の詳細については、「RLIKE」をご参照ください。
start_position: オプションです。 BIGINT型の定数。 このパラメーターの値は0より大きくなければなりません。 このパラメーターを指定しない場合、デフォルト値は1です。 この値は、検索がソース文字列の最初の文字から始まることを示します。
occurrence: オプション。 BIGINT型の定数。 このパラメーターの値は0より大きくなければなりません。 このパラメーターを指定しない場合、デフォルト値は1です。 この値は、最初に一致した部分文字列が返されることを示します。
戻り値
STRING型の値が返されます。 戻り値は、次のルールによって異なります。
patternが空の文字列の場合、エラーが返されます。
指定されたパターンに一致する部分文字列がない場合は、nullが返されます。
start_positionまたはoccurrenceの値がBIGINT型でないか、0以下の場合、エラーが返されます。
source、pattern、start_position、occurrence、またはreturn_optionの値がnullの場合、nullが返されます。
例
例1: 指定したパターンに一致する
I love aliyun very much
stringの部分文字列を返します。 例:-- The return value is aliyun. select regexp_substr('I love aliyun very much', 'a[[:alpha:]]{5}'); -- The return value is have. select regexp_substr('I have 2 apples and 100 bucks!', '[[:blank:]][[:alnum:]]*', 1, 1); -- The return value is 2. select regexp_substr('I have 2 apples and 100 bucks!', '[[:blank:]][[:alnum:]]*', 1, 2);
例2: 入力パラメーターをnullに設定します。 例:
-- The return value is null. select regexp_substr('I love aliyun very much', null);
REPEAT
構文
string repeat(string <str>, bigint <n>)
説明
strで指定された文字列をn回繰り返す文字列を返します。
パラメーター
str: 必須です。 STRING型の値。 入力値がBIGINT型、DOUBLE型、DECIMAL型、またはDATETIME型の場合、計算前に値は暗黙的にSTRING型の値に変換されます。
n: 必須です。 BIGINT型の値。 返される文字列の長さは2 MBを超えることはできません。
戻り値
STRING型の値が返されます。 戻り値は、次のルールによって異なります。
strの値がSTRING、BIGINT、DOUBLE、DECIMAL、またはDATETIME型でない場合、エラーが返されます。
nが空の場合、エラーが返されます。
strまたはnの値がnullの場合、nullが返されます。
例
例1: 文字列
abc
を5
回繰り返す文字列を返します。 例:-- The return value is abcabcabcabcabc. select repeat('abc', 5);
例2: 入力パラメーターをnullに設定します。 例:
-- The return value is null. select repeat('abc', null);
REPLACE
構文
string replace(string <str>, string <old>, string <new>)
説明
strで指定された文字列の一部がoldで指定された文字列と完全に一致する場合、文字列のこの部分はnewで指定された文字列に置き換えられ、置き換え後の完全な文字列が返されます。 strで指定された文字列の一部がoldで指定された文字列と一致しない場合、strで指定された元の文字列が返されます。 この関数は、MaxCompute V2.0の追加関数です。
パラメーター
str: 必須です。 STRING型の値。 このパラメータは、置き換える文字列を指定します。
old: 必須です。 このパラメーターは、比較に使用する文字列を指定します。
new: 必須です。 このパラメーターは、元の文字列を置き換えるために使用する文字列を指定します。
戻り値
STRING型の値が返されます。 入力パラメーターがnullに設定されている場合、nullが返されます。
例
例1: 文字列
ababab
の文字列abab
とまったく同じ部分を文字列12
に置き換えます。 例:-- The return value is 12ab. select replace('ababab','abab','12');
例2: 入力パラメーターをnullに設定します。 例:
-- The return value is null. select replace('123abab456ab',null,'abab');
REVERSE
構文
string reverse(string <str>)
説明
文字列の文字を逆の順序で返します。
パラメーター
str: 必須です。 STRING型の値。 入力値がBIGINT型、DOUBLE型、DECIMAL型、またはDATETIME型の場合、計算前に値は暗黙的にSTRING型の値に変換されます。
戻り値
STRING型の値が返されます。 戻り値は、次のルールによって異なります。
strの値がSTRING、BIGINT、DOUBLE、DECIMAL、またはDATETIME型でない場合、エラーが返されます。
strの値がnullの場合、nullが返されます。
例
例1:
I love aliyun very much
という文字列の逆順の文字列を返します。 例:-- The return value is hcum yrev nuyila evol I. select reverse('I love aliyun very much');
例2: 入力パラメーターをnullに設定します。 例:
-- The return value is null. select reverse(null);
RPAD
構文
string rpad(string <str1>, int <length>, string <str2>)
説明
右パッドstr1とstr2を指定した長さにします。 この関数は、MaxCompute V2.0の追加関数です。
パラメーター
str1: 必須です。 STRING型の値。 このパラメータは、右パッドにする文字列を指定します。
length: 必須。 INT型の値。 このパラメータは、右パディングに使用される文字数を指定します。
str2: 必須です。 このパラメータは、別の文字列を右パディングするために使用する文字列を指定します。
戻り値
STRING型の値が返されます。 戻り値は、次のルールによって異なります。
lengthの値がstr1の文字数より小さい場合、この関数はstr1を左から切り捨てて、lengthで指定された文字数の文字列を取得します。
lengthが0に設定されている場合、空の文字列が返されます。
使用可能な入力パラメーターがない場合、または入力パラメーターがnullに設定されている場合は、nullが返されます。
例
例1: 文字列
abcdefgh
を文字列12
で右パディングして、長さ10文字の文字列を取得します。 例:-- The return value is abcdefgh12. select rpad('abcdefgh', 10, '12');
例2: 文字列
abcdefgh
を文字列12
で右パディングして、長さ5文字の文字列を取得します。 例:-- The return value is abcde. select rpad('abcdefgh', 5, '12');
例3: lengthの値は0です。 例:
-- The return value is an empty string. select rpad('abcdefgh' ,0, '12');
例4: 入力パラメータがnullに設定されています。 例:
-- The return value is null. select rpad(null ,0, '12');
RTRIM
構文
string rtrim(string <str>[, <trimChars>]) string trim(trailing [<trimChars>] from <str>)
説明
strで指定した文字列の右側から文字を削除します。
trimCharsを指定しない場合、右側のスペースはデフォルトで削除されます。
trimCharsを指定した場合、trimCharsで指定された1つ以上の文字で構成される部分文字列は、strで指定された文字列の右側から削除されます。
パラメーター
str: 必須です。 STRING型の値。 このパラメータは、文字が削除される右側の文字列を指定します。 入力値がBIGINT型、DECIMAL型、DOUBLE型、またはDATETIME型の場合、計算前に値は暗黙的にSTRING型の値に変換されます。
trimChars: オプション。 STRING型の値。 削除する文字を指定します。
戻り値
STRING型の値が返されます。 戻り値は、次のルールによって異なります。
strの値がSTRING、BIGINT、DOUBLE、DECIMAL、またはDATETIME型でない場合、エラーが返されます。
strまたはtrimCharsの値がnullの場合、nullが返されます。
例
例1: 文字列
yxTxyomxx
の右側からスペースを削除します。 例:-- The return value is yxTxyomxx. select rtrim(' yxTxyomxx '); -- The preceding statement is equivalent to the following statement: select trim(trailing from ' yxTxyomxx ');
例2:
xy
コレクション内の1つ以上の文字で構成される部分文字列を、文字列yxTxyomxx
の右側から削除します。-- The return value is yxTxyom. If x or y appears on the right side of a string, it is removed. select rtrim('yxTxyomxx', 'xy'); -- The preceding statement is equivalent to the following statement: select trim(trailing 'xy' from 'yxTxyomxx');
例3: 入力パラメーターがnullに設定されています。 例:
-- The return value is null. select rtrim(null); select ltrim('yxTxyomxx', 'null');
SOUNDEX
構文
string soundex(string <str>)
説明
通常の文字列をSOUNDEX型の文字列に変換します。
パラメーター
str: 必須です。 STRING型の値。 このパラメータは、変換する文字列を指定します。 この関数は、MaxCompute V2.0の追加関数です。
戻り値
STRING型の値が返されます。 strの値がnullの場合、nullが返されます。
例
例1: 文字列
hello
をSOUNDEX型の文字列に変換します。 例:-- The return value is H400. select soundex('hello');
例2: 入力パラメーターをnullに設定します。 例:
-- The return value is null. select soundex(null);
SPACE
構文
string space(bigint <n>)
説明
長さnのスペース文字列を生成します。
パラメーター
n: 必須です。 BIGINT型の値。 返される文字列の長さは2 MBを超えることはできません。
戻り値
STRING型の値が返されます。 次のシナリオでは、値nullが返されます。
nが空の場合、エラーが返されます。
nの値がnullの場合、nullが返されます。
例
-- The return value is 10. select length(space(10));
分割
構文
split(<str>, <pat>, [<trimTailEmpty>])
パラメーター
str: 必須です。 STRING型の値。 このパラメータは、分割する文字列を指定します。
pat: 必須です。 STRING型の区切り文字。 正規表現に対応しています。 正規表現の詳細については、「正規表現」をご参照ください。
trimTailEmpty: オプション。 デフォルト値は
true
です。 このパラメーターをfalse
に設定すると、配列の末尾にある空の文字列が予約されます。 このルールは、ハイブ互換データ型エディションが有効な場合に適用されます。
戻り値
配列が返されます。 配列内の要素はSTRING型です。
例
-- The return value is ["a"," b"," c"]. select split("a, b, c", ","); -- No empty string is returned by default. select split("a, b, c,,", ","); -- The following result is returned: +------------+ | _c0 | +------------+ | ["a"," b"," c"] | +------------+ -- If you need to return an empty string, execute the following statement: select split("a, b, c,,", ",", false); -- The following result is returned: +------------+ | _c0 | +------------+ | ["a"," b"," c","",""] | +------------+
SPLIT_PART
構文
string split_part(string <str>, string <separator>, bigint <start>[, bigint <end>])
説明
separatorで指定された区切り文字を使用してstrで指定された文字列を分割し、startで指定された文字から始まり、endで指定された文字列で終わる部分文字列を返します。
パラメーター
str: 必須です。 STRING型の値。 このパラメータは、分割する文字列を指定します。 入力値がBIGINT、DOUBLE、DECIMAL、またはDATETIME型の場合、計算前に暗黙的にSTRING型の値に変換されます。
separator: 必須。 STRING型の定数。 このパラメーターは、文字列を分割するために使用される区切り文字を指定します。 区切り文字は、文字または文字列にすることができます。
start: 必須です。 BIGINT型の定数。 このパラメーターの値は0より大きくなければなりません。 返される部分文字列の開始位置を指定します。 位置は1から始まります。
end: BIGINT型の定数です。 このパラメーターの値は、startの値以上である必要があります。 このパラメーターは、返される部分文字列の終了位置を指定します。 このパラメーターを指定しない場合、このパラメーターの値はstartの値と等しく、startで指定された文字から始まる部分文字列が返されます。
戻り値
STRING型の値が返されます。 次のシナリオでは、値nullが返されます。
startが部分文字列の数より大きい値に設定されている場合 (たとえば、文字列に6つの部分文字列があり、start値が6より大きい場合) 、空の文字列が返されます。
strで指定された文字列にseparatorがなく、startが1に設定されている場合、strで指定された文字列全体が返されます。 strが空の文字列の場合、空の文字列が返されます。
separatorが空の文字列の場合、strで指定された元の文字列が返されます。
endの値が部分文字列の数より大きい場合、startで指定された文字から始まる部分文字列が返されます。
strの値がSTRING、BIGINT、DOUBLE、DECIMAL、またはDATETIME型でない場合、エラーが返されます。
separatorの値がSTRING型の定数でない場合、エラーが返されます。
startまたはendの値がBIGINT型の定数でない場合、エラーが返されます。
separator以外の入力パラメーターの値がnullの場合、nullが返されます。
例
例1:
コンマ (,)
を区切り文字として使用して、文字列a、b、c、d
を分割し、指定されたルールに一致する部分文字列を返します。 サンプル文:-- The return value is a. select split_part('a,b,c,d', ',', 1); -- The return value is a,b. select split_part('a,b,c,d', ',', 1, 2);
例2: startの値は、指定された文字列が部分文字列に分割された後の部分文字列の数よりも大きくなります。 例:
-- The return value is an empty string. select split_part('a,b,c,d', ',', 10);
例3: strで指定した文字列にseparatorが存在しません。 例:
-- The return value is a,b,c,d. select split_part('a,b,c,d', ':', 1); -- The return value is an empty string. select split_part('a,b,c,d', ':', 2);
例4: separatorは空の文字列です。 例:
-- The return value is a,b,c,d. select split_part('a,b,c,d', '', 1);
例5: endの値は、指定された文字列が部分文字列に分割された後の部分文字列の数よりも大きくなります。 例:
-- The return value is b,c,d. select split_part('a,b,c,d', ',', 2, 6);
例6: separator以外の入力パラメータをnullに設定します。 例:
-- The return value is null. select split_part('a,b,c,d', ',', null);
SUBSTR
構文
string substr(string <str>, bigint <start_position>[, bigint <length>])
説明
strで指定された文字列のstart_positionから始まり、lengthで指定された長さを持つ部分文字列を返します。
パラメーター
str: 必須です。 STRING型の値。 入力値がBIGINT、DECIMAL、DOUBLE、またはDATETIME型の場合、計算前に暗黙的にSTRING型の値に変換されます。
start_position: 必須です。 BIGINT型の値。 デフォルト値は 1 です。
Hive互換データ型エディション: start_positionが0に設定されている場合、戻り値はこのパラメーターが1に設定されている場合と同じです。
MaxCompute V1.0およびMaxCompute V2.0データ型のエディション: start_positionが0に設定されている場合、nullが返されます。
length: オプション。 BIGINT型の値。 部分文字列の長さを指定します。 このパラメーターの値は0より大きくなければなりません。
重要setproject odps.function.strictmode
がfalseに設定され、lengthパラメーターの値が0未満の場合、部分文字列は返されません。setproject odps.function.strictmode
がtrueに設定され、lengthパラメーターの値が0未満の場合、エラーが返されます。
戻り値
STRING型の値が返されます。 戻り値は、次のルールによって異なります。
strの値がSTRING、BIGINT、DECIMAL、DOUBLE、またはDATETIME型でない場合、エラーが返されます。
lengthの値がBIGINT型でないか、または0以下の場合、エラーが返されます。
lengthを指定しない場合、strで指定した文字列の開始位置から終了までの部分文字列が返されます。
str、start_position、またはlengthの値がnullの場合、nullが返されます。
例
例1: 文字列
abc
の指定された位置から始まる、指定された長さの部分文字列を返します。 サンプル文:-- The return value is bc. select substr('abc', 2); -- The return value is b. select substr('abc', 2, 1); -- The return value is bc. select substr('abc',-2 , 2);
例2: 入力パラメーターをnullに設定します。 例:
-- The return value is null. select substr('abc', null);
SUBSTRING
構文
string substring(string|binary <str>, int <start_position>[, int <length>])
説明
strで指定された文字列のstart_positionから始まり、lengthで指定された長さを持つ部分文字列を返します。
パラメーター
str: 必須です。 STRING型またはBINARY型の値。
start_position: 必須です。 INT型の値。 開始位置は1から始まります。 start_positionが0に設定されている場合、空の文字列が返されます。 start_positionが負の値に設定されている場合、検索は文字列の末尾から先頭まで開始され、最後の文字は-1になります。
length: オプション。 BIGINT型の値。 部分文字列の長さを指定します。 このパラメーターの値は0より大きくなければなりません。
戻り値
STRING型の値が返されます。 戻り値は、次のルールによって異なります。
strの値がSTRING型またはBINARY型でない場合、エラーが返されます。
lengthの値がBIGINT型でないか、または0以下の場合、エラーが返されます。
lengthを指定しない場合、strで指定した文字列の開始位置から終了までの部分文字列が返されます。
str、start_position、またはlengthの値がnullの場合、nullが返されます。
例
例1: 文字列
abc
の指定された位置から始まる、指定された長さの部分文字列を返します。 サンプル文:-- The return value is bc. select substring('abc', 2); -- The return value is b. select substring('abc', 2, 1); -- The return value is bc. select substring('abc',-2,2); -- The return value is ab. select substring('abc',-3,2); -- The return value is 001. substring(bin(2345), 2, 3);
例2: 入力パラメーターをnullに設定します。 例:
-- The return value is null. select substring('abc', null, null);
SUBSTRING_INDEX
構文
string substring_index(string <str>, string <separator>, int <count>)
説明
文字列strを、最初の文字からn番目の区切り文字までの部分文字列に切り捨てます。 nはcountで指定します。 countが正の値に設定されている場合、文字列は左から右に切り捨てられます。 countが負の値に設定されている場合、文字列は右から左に切り捨てられます。 この関数は、MaxCompute V2.0の追加関数です。
パラメーター
str: 必須です。 STRING型の値。 このパラメータは、切り捨てたい文字列を指定します。
separator: 必須。 STRING型の区切り文字。
count: 必須です。 値はINT型です。 このパラメータは、区切り文字の位置を指定します。
戻り値
STRING型の値が返されます。 入力パラメーターがnullに設定されている場合、nullが返されます。
例
例1: 文字列
https://www.alibabacloud.com
を切り捨てます。 サンプル文:-- The return value is https://www.alibabacloud. select substring_index('https://www.alibabacloud.com', '.', 2); -- The return value is alibabacloud.com. select substring_index('https://www.alibabacloud.com', '.', -2);
例2: 入力パラメーターをnullに設定します。 例:
-- The return value is null. select substring_index('https://www.alibabacloud.com', null, 2);
TO_CHAR
構文
string to_char(boolean <value>) string to_char(bigint <value>) string to_char(double <value>) string to_char(decimal <value>)
説明
BOOLEAN、BIGINT、DECIMAL、またはDOUBLE型のデータをSTRING型に変換します。
パラメーター
value: 必須です。 BOOLEAN、BIGINT、DECIMAL、またはDOUBLE型の値。
戻り値
STRING型の値が返されます。 戻り値は、次のルールによって異なります。
valueがBOOLEAN、BIGINT、DECIMAL、またはDOUBLE型でない場合、エラーが返されます。
valueがnullに設定されている場合、nullが返されます。
例
例1: 値をSTRING型に変換します。 サンプル文:
-- The return value is 123. select to_char(123); -- The return value is TRUE. select to_char(true); -- The return value is 1.23. select to_char(1.23);
例2: 入力パラメーターをnullに設定します。 例:
-- The return value is null. select to_char(null);
TO_JSON
構文
string to_json(<expr>)
説明
指定された複合データ型のexprで指定された式をJSON文字列に変換します。
パラメーター
expr: 必須です。 ARRAY、MAP、またはSTRUCTタイプの式。
説明入力式がSTRUCT型 (
struct<key1:value1, key2:value2>
) の場合は、次の点に注意してください。式をJSON文字列に変換すると、すべてのキーが小文字に変換されます。
value
がnullの場合、value
が属するキーと値のペアは、返されるJSON文字列に含まれません。 たとえば、value2
がnullの場合、返されるJSON文字列にはkey2:value2
は含まれません。
戻り値
JSON文字列が返されます。
例
例1: 特定の複合データ型の式をJSON文字列に変換します。 例:
-- The return value is {"a":1,"b":2}. select to_json(named_struct('a', 1, 'b', 2)); -- The return value is {"time":"26/08/2015"}. select to_json(named_struct('time', "26/08/2015")); -- The return value is [{"a":1,"b":2}]. select to_json(array(named_struct('a', 1, 'b', 2))); -- The return value is {"a":{"b":1}}. select to_json(map('a', named_struct('b', 1))); -- The return value is {"a":1}. select to_json(map('a', 1)); -- The return value is [{"a":1}]. select to_json(array((map('a', 1))));
例2: 入力式はSTRUCT型です。 例:
-- The return value is {"a":"B"}. If the expression of the STRUCT type is converted into a JSON string, all keys are converted into lowercase letters. select to_json(named_struct("A", "B")); -- The return value is {"k2":"v2"}. The key-value pair to which null belongs is not included in the JSON string that is returned. select to_json(named_struct("k1", cast(null as string), "k2", "v2"));
TOLOWER
構文
string tolower(string <source>)
説明
sourceで指定された文字列の大文字を小文字に変換します。
パラメーター
source: 必須です。 STRING型の値。 入力値がBIGINT型、DOUBLE型、DECIMAL型、またはDATETIME型の場合、計算前に値は暗黙的にSTRING型の値に変換されます。 英語のみがサポートされています。
戻り値
STRING型の値が返されます。 戻り値は、次のルールによって異なります。
sourceの値がSTRING、BIGINT、DOUBLE、DECIMAL、またはDATETIME型でない場合、エラーが返されます。
sourceの値がnullの場合、nullが返されます。
例
例1: 文字列の大文字を小文字に変換します。 サンプル文:
-- The return value is abcd. select tolower('aBcd'); -- The return value is china fighting. select tolower('China Fighting');
例2: 入力パラメーターをnullに設定します。 例:
-- The return value is null. select tolower(null);
TOUPPER
構文
string toupper(string <source>)
説明
sourceで指定された文字列の小文字を大文字に変換します。
パラメーター
source: 必須です。 STRING型の値。 入力値がBIGINT型、DOUBLE型、DECIMAL型、またはDATETIME型の場合、計算前に値は暗黙的にSTRING型の値に変換されます。 英語のみがサポートされています。
戻り値
STRING型の値が返されます。 戻り値は、次のルールによって異なります。
sourceの値がSTRING、BIGINT、DOUBLE、DECIMAL、またはDATETIME型でない場合、エラーが返されます。
sourceの値がnullの場合、nullが返されます。
例
例1: 文字列の小文字を大文字に変換します。 サンプル文:
-- The return value is ABCD. select toupper('aBcd'); -- The return value is CHINA FIGHTING. select toupper('China Fighting');
例2: 入力パラメーターをnullに設定します。 例:
-- The return value is null. select toupper(null);
TRANSLATE
構文
string translate(string|varchar <str1>, string|varchar <str2>, string|varchar <str3>)
説明
str3で指定した文字を使用して、str1に含まれる文字をstr2から置き換えます。 str1に含まれる文字がstr2に表示されない場合、文字は置き換えられません。 この関数は、MaxCompute V2.0の追加関数です。
戻り値
STRING型の値が返されます。 入力パラメーターがnullに設定されている場合、nullが返されます。
例
例1: 文字列
cd
で指定した文字を使用して、ababab
に含まれる文字をabab
から置き換えます。 例:-- The return value is cdcdcd. select translate('ababab','abab','cd');
例2: 文字列
cdefg
で指定した文字を使用して、ababab
に含まれる文字をabab
から置き換えます。 例:-- The return value is cdcdcd. select translate('ababab','abab','cdefg');
例3: 入力パラメータがnullに設定されています。 例:
-- The return value is null. select translate('ababab','cd',null);
TRIM
構文
string trim(string <str>[,<trimChars>]) string trim([BOTH] [<trimChars>] from <str>)
説明
strで指定した文字列の左右両方の文字を削除します。
trimCharsを指定しない場合、左側のスペースはデフォルトで削除されます。
trimCharsを指定した場合、trimCharsで指定した1つ以上の文字列で構成される部分文字列は、strで指定した文字列の左右両方から削除されます。
パラメーター
str: 必須です。 STRING型の値。 このパラメータは、文字が削除される左右両方の文字列を指定します。 入力値がBIGINT型、DECIMAL型、DOUBLE型、またはDATETIME型の場合、計算前に値は暗黙的にSTRING型の値に変換されます。
trimChars: オプション。 STRING型の値。 削除する文字を指定します。
戻り値
STRING型の値が返されます。 戻り値は、次のルールによって異なります。
strの値がSTRING、BIGINT、DOUBLE、DECIMAL、またはDATETIME型でない場合、エラーが返されます。
strまたはtrimCharsの値がnullの場合、nullが返されます。
例
例1: 文字列
yxTxyomxx
の左右両側からスペースを削除します。 例:-- The return value is yxTxyomxx. select trim(' yxTxyomxx '); -- The preceding statement is equivalent to the following statement: select trim(both from ' yxTxyomxx '); select trim(from ' yxTxyomxx ');
例2:
xy
コレクション内の1つ以上の文字で構成される部分文字列を、文字列yxTxyomxx
の左右両方から削除します。-- The return value is Txyom. Any x or y character on the left or right side is removed. select trim('yxTxyomxx', 'xy'); -- The preceding statement is equivalent to the following statement: select trim(both 'xy' from 'yxTxyomxx'); select trim('xy' from 'yxTxyomxx');
例3: 入力パラメーターがnullに設定されています。 例:
-- The return value is null. select trim(null); select trim('yxTxyomxx', null);
URL_DECODE
構文
string url_decode(string <input>[, string <encoding>])
説明
application/x-www-form-urlencoded MIME
形式の入力文字列を通常の文字列に変換します。 これはurl_encode
の逆関数です。 エンコード形式は、次のルールに従う必要があります。すべての文字は変更されません。
ピリオド (.) 、ハイフン (-) 、アスタリスク (*) 、およびアンダースコア (_) は変更されません。
プラス記号 (+) はスペースに変換されます。
% xy
形式のシーケンスはバイト値に変換されます。 連続するバイト値は、encodingの値に基づいて関連する文字列にデコードされます。他の文字は変更されません。
パラメーター
input: 必須です。 STRING型の値。 このパラメータは、入力する文字列を指定します。
encoding: オプション。 このパラメータは、GBKまたはUTF-8のエンコード形式を指定します。 このパラメーターを指定しない場合、デフォルト値はUTF-8です。
戻り値
string型のUTF-8エンコードされた文字列が返されます。 inputまたはencodingの値がnullの場合、nullが返されます。
例:
-- The return value is for url_decode:// (fdsf). select url_decode('%E7%A4%BA%E4%BE%8Bfor+url_decode%3A%2F%2F+%28fdsf%29'); -- The return value is Example for URL_DECODE:// dsf(fasfs). select url_decode('Example+for+url_decode+%3A%2F%2F+dsf%28fasfs%29', 'GBK');
URL_ENCODE
構文
string url_encode(string <input>[, string <encoding>])
説明
入力文字列を
application/x-www-form-urlencoded MIME
形式でエンコードします。 エンコード形式は、次のルールに従う必要があります。すべての文字は変更されません。
ピリオド (.) 、ハイフン (-) 、アスタリスク (*) 、およびアンダースコア (_) は変更されません。
スペースはプラス記号 (+) に変換されます。
他の文字は、指定されたエンコード形式に基づいてバイト値に変換されます。 次に、各バイト値は
% xy
形式で表されます。ここで、xy
は文字値の16進表現です。
パラメーター
input: 必須です。 STRING型の値。 このパラメータは、入力する文字列を指定します。
encoding: オプション。 このパラメータは、GBKまたはUTF-8のエンコード形式を指定します。 このパラメーターを指定しない場合、デフォルト値はUTF-8です。
戻り値
STRING型の値が返されます。 inputまたはencodingの値がnullの場合、nullが返されます。
例
-- The return value is %E7%A4%BA%E4%BE%8Bfor+url_encode%3A%2F%2F+%28fdsf%29. select url_encode('Example for url_encode:// (fdsf)'); -- The return value is Example+for+url_encode+%3A%2F%2F+dsf%28fasfs%29. select url_encode('Example for url_encode:// dsf(fasfs)', 'GBK');
関連ドキュメント
上記の関数がビジネス要件を満たせない場合は、独自のコードロジックを作成して、さまざまなビジネス要件を満たすユーザー定義関数 (UDF) を作成できます。 詳細については、「概要」をご参照ください。