すべてのプロダクト
Search
ドキュメントセンター

MaxCompute:文字列関数

最終更新日:May 28, 2026

MaxCompute は、テーブル内の文字列データをトランケート、連結、変換、比較、検索するための文字列関数を提供します。

MaxCompute SQL は、以下の文字列関数をサポートしています。

関数

説明

ASCII

文字列の先頭文字の ASCII コードを返します。

CHAR_MATCHCOUNT

文字列 A のうち、文字列 B に含まれる文字数を計算します。

CHR

ASCII コードを文字に変換します。

CONCAT

文字列を連結します。

CONCAT_WS

指定したデリミタを使用して、すべての入力文字列を連結します。

DECODE

指定したエンコーディング形式を使用して文字列をデコードします。

ENCODE

指定したエンコーディング形式を使用して文字列をエンコードします。

FIND_IN_SET

カンマ区切りの文字列内で、指定した文字列の位置を検索します。

FORMAT_NUMBER

数値を指定した形式の文字列に変換します。

FROM_CHARSET

指定したエンコーディング形式のバイナリデータを UTF-8 文字列に変換します。

FROM_JSON

指定した JSON 文字列と出力形式に基づいて、配列、構造体、または MAP 型のデータを返します。

GET_JSON_OBJECT

指定したメソッドを使用して、標準 JSON 文字列から指定した文字列を抽出します。

INITCAP

文字列をタイトルケースに変換します。各単語の先頭文字を大文字にし、続く文字を小文字にします。単語はスペースで区切られます。

INSTR

文字列 B 内での文字列 A の位置を検索します。

IS_ENCODING

文字列を文字セット A から文字セット B に変換できるかどうかを判定します。

JSON_TUPLE

標準 JSON 文字列から、入力キーのセットに対応する文字列を抽出します。

KEYVALUE

文字列をキーと値のペアに分割し、ペアを区切って、指定したキーに対応する値を返します。

KEYVALUE_TUPLE

文字列を複数のキーと値のペアに分割し、ペアを区切って、複数の指定したキーに対応する値を返します。

LENGTH

文字列の長さを計算します。

LENGTHB

文字列のバイト長を計算します。

LOCATE

文字列内で、指定した部分文字列の位置を検索します。

LPAD

文字列の左側を埋めて、指定した長さにします。

LTRIM

文字列の左端から文字を削除します。

MASK_HASH

文字列式から計算したハッシュ値を返します。

MD5

文字列の MD5 ハッシュを計算します。

PARSE_URL

URL を解析し、指定した部分の情報を返します。

PARSE_URL_TUPLE

URL を解析し、複数の部分の情報を返します。

REGEXP_COUNT

指定した位置から、指定したパターンに一致する部分文字列の数をカウントします。

REGEXP_EXTRACT

指定したパターンに基づいて文字列をグループに分割し、指定したグループの文字列を返します。

REGEXP_EXTRACT_ALL

文字列内で正規表現パターンに一致するすべての部分文字列を検索し、配列として返します。

REGEXP_INSTR

指定した位置から、指定した出現回数に対して指定したパターンに一致する部分文字列の開始位置または終了位置を返します。

REGEXP_REPLACE

指定した出現回数に対して、指定したパターンに一致する部分文字列を別の文字列に置き換えます。

REGEXP_SUBSTR

指定した位置から、指定した出現回数に対して指定したパターンに一致する部分文字列を返します。

REPEAT

指定した回数だけ繰り返した文字列を返します。

REPLACE

指定した文字列に一致する部分文字列を別の文字列に置き換えます。

REVERSE

反転した文字列を返します。

RPAD

文字列の右側を埋めて、指定した長さにします。

RTRIM

文字列の右端から文字を削除します。

SOUNDEX

標準文字列を SOUNDEX 文字列に変換します。

SPACE

スペースで構成される文字列を生成します。

SPLIT

デリミタを使用して文字列を分割し、配列を返します。

SPLIT_PART

デリミタを使用して文字列を分割し、指定した部分を返します。

SUBSTR

STRING 型の文字列について、指定した位置から始まる指定した長さの部分文字列を返します。

SUBSTRING

STRING 型または BINARY 型の文字列について、指定した位置から始まる指定した長さの部分文字列を返します。

SUBSTRING_INDEX

デリミタの指定した出現回数の前または後の部分文字列を抽出します。

TO_CHAR

BOOLEAN、BIGINT、DECIMAL、または DOUBLE の値を、STRING 表現に変換します。

TO_JSON

指定した複合型を JSON 文字列に変換します。

TOLOWER

文字列内の英字の大文字を小文字に変換します。

TOUPPER

文字列内の英字の小文字を大文字に変換します。

TRANSLATE

文字列 B に含まれる文字のうち、文字列 A の各文字を文字列 C の対応する文字に置き換えます。

TRIM

文字列の両端から文字を削除します。

URL_DECODE

文字列を application/x-www-form-urlencoded MIME 形式から標準文字に変換します。

URL_ENCODE

application/x-www-form-urlencoded MIME 形式で文字列をエンコードします。

使用上の注意

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 コードを返します。サンプルステートメント:

      -- 97 を返します。
      select ascii('abcde'); 
    • 例 2:入力パラメーターが NULL の場合。サンプルステートメント:

      -- NULL を返します。
      select ascii(null);

CHAR_MATCHCOUNT

  • 構文

    bigint char_matchcount(string <str1>, string <str2>)
  • 説明

    str1 に含まれる文字のうち、str2 に出現する文字の数を計算します。

  • パラメーター

    str1str2: 必須。 STRING 型。どちらの文字列も有効な UTF-8 文字列である必要があります。比較中に無効な文字 (Unicode でエンコードされていない文字) が見つかった場合、負の値を返します。

  • 戻り値

    BIGINT 型の値を返します。 str1 または str2 が NULL の場合、NULL を返します。

    • 例 1: 文字列 aabc のうち、abcde に出現する文字の数を計算します。サンプル文:

      -- 4 を返します。
      select char_matchcount('aabc','abcde');
    • 例 2: 入力パラメーターの 1 つが NULL の場合。サンプル文:

      -- NULL を返します。
      select char_matchcount(null,'abcde');

CHR

  • 構文

    STRING chr(bigint <ascii>)
  • 説明

    指定した ASCII コードを文字に変換します。

  • パラメーター

    ascii:必須。BIGINT 型の ASCII 値。有効な値:0 ~ 127。入力が STRING、DOUBLE、または DECIMAL 型の場合、計算の前に BIGINT 型に暗黙的に変換されます。

  • 戻り値

    STRING 型の値を返します。戻り値は次のルールに従います:

    • ascii の値が有効な範囲外の場合、エラーが返されます。

    • ascii が BIGINT、STRING、DOUBLE、または DECIMAL 型ではない場合、エラーが返されます。

    • ascii が NULL の場合、NULL が返されます。

    • 例 1:ASCII コード 100 を文字に変換します。サンプルステートメント:

      -- d を返します。
      select chr(100);
    • 例 2:入力パラメーターが NULL の場合。サンプルステートメント:

      -- NULL を返します。
      select chr(null);
    • 例 3:入力が STRING 型の文字の場合。サンプルステートメント:

      -- 入力は BIGINT 型に暗黙的に変換され、'd' が返されます。
      select chr('100');

CONCAT

  • 構文

    array<T> concat(array<T> <a>, array<T> <b>[,...])
    string concat(string <str1>, string <str2>[,...])
  • 説明

    • 入力として配列を指定した場合: 複数の配列のすべての要素を連結し、新しい配列を返します。

    • 入力として文字列を指定した場合: 複数の文字列を連結し、新しい文字列を返します。

  • パラメーター

    • a および b: 必須。これらのパラメーターは配列を指定します。 T in array<T> は、配列内の要素のデータ型を指定します。要素は任意のデータ型にすることができます。配列 a 内の要素と配列 b 内の要素は、同じデータ型である必要があります。null 要素も操作に含まれます。

    • str1 および str2: 必須。STRING 型の値。入力値が BIGINT、DOUBLE、DECIMAL、または DATETIME 型の場合、計算前に STRING 型の値に暗黙的に変換されます。入力値が他のデータ型の場合、エラーが返されます。

  • 戻り値

    • ARRAY 型の値が返されます。入力配列のいずれかが null の場合、null が返されます。

    • STRING 型の値が返されます。入力パラメーターが設定されていない場合、または入力パラメーターが null に設定されている場合、null が返されます。

    • 例 1: array(10, 20)array(20, -20) のすべての要素を連結します。サンプルステートメント:

      -- 戻り値は [10, 20, 20, -20] です。
      select concat(array(10, 20), array(20, -20));
    • 例 2: 入力配列のいずれかに null 要素が含まれています。サンプルステートメント:

      -- 戻り値は [10, null, 20, -20] です。
      select concat(array(10, null), array(20, -20));
    • 例 3: 入力配列のいずれかが null です。サンプルステートメント:

      -- 戻り値は null です。
      select concat(array(10, 20), null);
    • 例 4: 文字列 aabcabcde を連結します。サンプルステートメント:

      -- 戻り値は aabcabcde です。
      select concat('aabc','abcde');
    • 例 5: 入力が空です。サンプルステートメント:

      -- 戻り値は null です。
      select concat();
    • 例 6: 入力文字列のいずれかが null です。サンプルステートメント:

      -- 戻り値は 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 型のデリミタ。

    • str1str2:少なくとも 2 つの文字列を指定する必要があります。STRING 型。入力が BIGINT、DECIMAL、DOUBLE、または DATETIME 型の場合、計算前に STRING 型に暗黙的に変換されます。

    • a:必須。ARRAY 型。配列の要素は STRING 型である必要があります。

  • 戻り値

    STRING 型の値を返します。戻り値は次のルールに従います。

    • str1 または str2 が STRING、BIGINT、DECIMAL、DOUBLE、または DATETIME 型でない場合、エラーが返されます。

    • 入力パラメーターが指定されていない場合、またはいずれかの入力パラメーターが NULL の場合、NULL が返されます。

    • 例 1:: を使用して、文字列 namehanmeimei を連結します。サンプル文:

      -- name:hanmeimei を返します。
      select concat_ws(':','name','hanmeimei');

      -

    • 例 2:入力パラメーターの 1 つが NULL です。サンプル文:

      -- NULL を返します。
      select concat_ws(':','avg',null,'34');
    • 例 3:: を使用して、配列 array('name', 'hanmeimei') の要素を連結します。サンプル文:

      -- name:hanmeimei を返します。
      select concat_ws(':',array('name', 'hanmeimei'));

DECODE

  • 構文

    STRING DECODE(BINARY <str>, STRING <charset>)
  • 説明

    str を、charset で指定されたフォーマットでデコードします。

  • パラメーター

    パラメーター

    必須

    説明

    str

    はい

    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: 文字列「English Sample」を UTF-8 フォーマットでエンコードしてからデコードします。ステートメント例:

      -- 文字列をエンコードしてからデコードします。
      SELECT DECODE(ENCODE("English Sample","UTF-8"), "UTF-8");

      戻り値:

      +-----+| _c0 |+-----+| English Sample |+-----+
    • 例 2: いずれかの入力パラメーターを NULL に設定します。ステートメント例:

      SELECT DECODE(ENCODE("English Sample","UTF-8"), NULL);

      戻り値:

      +-----+| _c0 |+-----+| NULL |+-----+

ENCODE

  • 構文

    binary encode(string <str>, string <charset>)
  • 説明

    charset で指定したフォーマットで、str をエンコードします。

  • パラメーター

    • str:必須。STRING 型。エンコードする文字列。

    • charset:必須。STRING 型。エンコーディングフォーマット。有効な値:UTF-8、UTF-16、UTF-16LE、UTF-16BE、ISO-8859-1、US-ASCII。

  • 戻り値

    バイナリ型を返します。str または charset が NULL の場合、NULL を返します。

    • 例 1:文字列 abcUTF-8 フォーマットでエンコードします。サンプル文:

      -- abc を返します。
      select encode("abc", "UTF-8");
    • 例 2:文字列 abcUTF-16BE フォーマットでエンコードします。サンプル文:

      -- =00a=00b=00c を返します。
      select encode("abc", "UTF-16BE");
    • 例 3:入力パラメーターのいずれかが NULL の場合。サンプル文:

      -- NULL を返します。
      select encode("abc", null);

FIND_IN_SET

  • 構文

    BIGINT FIND_IN_SET(STRING <str1>, STRING <str2>[, STRING <delimiter>])
  • 説明

    delimiter で区切られた文字列 str2 内の文字列 str1 の位置を 1 から数えて検索します。

  • パラメーター

    パラメーター

    必須

    説明

    str1

    はい

    STRING 型。検索する文字列。

    str2

    はい

    STRING 型。delimiter で区切られた文字列。

    delimiter

    いいえ

    STRING 定数。デフォルトはカンマ (,) です。区切り文字には、単一の文字または文字列を指定できます。

  • 戻り値

    BIGINT 型を返します。戻り値は次のルールに従います:

    • str2str1 が含まれていない場合、または str1delimiter が含まれている場合は、0 を返します。

    • str1 または str2NULL の場合、NULL を返します。

    • 例 1:カンマ (,) で区切られた文字列 abc,hello,ab,c 内の文字列 ab の位置を検索します。サンプルステートメント:

      SELECT FIND_IN_SET('ab', 'abc,hello,ab,c') AS pos;

      戻り値:

      +------------+
      | pos        |
      +------------+
      | 3          |
      +------------+
    • 例 2:カンマ (,) で区切られた文字列 abc,hello,ab,c 内の文字列 hi の位置を検索します。サンプルステートメント:

      SELECT FIND_IN_SET('hi', 'abc,hello,ab,c') AS pos;

      戻り値:

      +------------+
      | pos        |
      +------------+
      | 0          |
      +------------+
    • 例 3:アンダースコア (_) で区切られた文字列 abc_hello_ab_c 内の文字列 ab の位置を検索します。サンプルステートメント:

      SELECT FIND_IN_SET('ab', 'abc_hello_ab_c', '_') AS pos;

      戻り値:

      +------------+
      | pos        |
      +------------+
      | 3          |
      +------------+
    • 例 4:入力パラメーター str1 または str2NULL の場合。サンプルステートメント:

      SELECT FIND_IN_SET(null, 'abc,hello,ab,c') AS pos;

      戻り値:

      +------------+
      | pos        |
      +------------+
      | NULL       |
      +------------+

FORMAT_NUMBER

  • 構文

    STRING FORMAT_NUMBER(DOUBLE|BIGINT|INT|SMALLINT|TINYINT|FLOAT|DECIMAL|STRING <expr1>, INT <expr2>)
  • 説明

    expr1expr2 に従ってフォーマットされた文字列に変換します。

  • パラメーター

  • expr1: 必須。FLOAT、DOUBLE、または DECIMAL 型の値。このパラメーターでは、書式設定する式を指定します。

  • expr2: 必須。 保持する小数点以下の桁数を指定します。 INT 型で、有効な値は 0~340 です。 このパラメーターは、 #,###,###.## のような形式で表現することもできます。 返される小数点以下の桁数は、このパラメーターの値によって異なります。

  • 戻り値

    STRING 型の値を返します。戻り値は、以下のルールに従います:

    • 0 より大きく 340 以下の expr2 の値に対しては、指定された小数点以下の桁数に丸められた値が返されます。

    • expr2 の値が 0 の場合、戻り値には整数部分のみが含まれ、小数点や小数部分は含まれません。

    • expr2 の値が 0 未満、または 340 より大きい 場合、エラーが返されます。

    • expr1 または expr2 が空または null の場合、 null が返されます。

    • 例 1:指定どおりに数値をフォーマットする場合。サンプルステートメント:

      -- 5.230 が返されます。
      SELECT FORMAT_NUMBER(5.230134523424545456,3);
      -- 12,332.123 が返されます。
      SELECT FORMAT_NUMBER(12332.123456, '#,###,###,###.###');
    • 例 2:入力パラメーターのいずれかが空または NULL の場合。サンプルステートメント:

      -- NULL が返されます。
      SELECT FORMAT_NUMBER('',3);
      -- NULL が返されます。
      SELECT FORMAT_NUMBER(null,3);

FROM_CHARSET

  • 構文

    STRING FROM_CHARSET(binary <source>, string <source_charset>[, string <mode>])
  • 説明

    FROM_CHARSET は、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 のバイナリデータを UTF-8 文字列へ変換する際に、変換できない文字があった場合の処理モードを指定します。有効な値:

      • 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 と出力フォーマット schema に基づいて、ARRAY、MAP、または STRUCT 型のデータを返します。

  • パラメーター

    • jsonStr: 必須。入力した JSON 文字列。

    • schema: 必須。JSON 文字列のスキーマ。このパラメーターの値は、array<bigint>map<string, array<string>>struct<a:int, b:double, `C`:map<string,string>> など、テーブル作成ステートメントと同じフォーマットである必要があります。

      説明

      構造体のキーは大文字と小文字が区別されます。a BIGINT, b DOUBLE の形式で構造体を指定することもできます。これは STRUCT<a:BIGINT, b:DOUBLE> と同等です。

      次の表は、JSON データ型と MaxCompute データ型のマッピングを示しています。

      JSON データ型

      MaxCompute データ型

      OBJECT

      STRUCT、MAP、および STRING

      ARRAY

      ARRAY および STRING

      NUMBER

      TINYINT、SMALLINT、INT、BIGINT、FLOAT、DOUBLE、DECIMAL、および STRING

      BOOLEAN

      BOOLEAN および STRING

      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 文字列を特定のデータ型の値に変換します。サンプルステートメント:

      -- 戻り値は {"a":1,"b":0.8} です。
      select from_json('{"a":1, "b":0.8}', 'a int, b double');
      -- 戻り値は {"time":"26/08/2015"} です。
      select from_json('{"time":"26/08/2015"}', 'time string');
      -- 戻り値は {"a":1,"b":0.8} です。
      select from_json('{"a":1, "b":0.8}', 'a int, b double, c string');
      -- 戻り値は [1,2,3] です。
      select from_json('[1, 2, 3, "a"]', 'array<bigint>');
      -- 戻り値は {"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 を使用して同じ目的を達成することもできます。サンプルステートメント:

      -- 戻り値は ["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 型の場合に使用される JSONPath 式と、STRING 型の場合に使用される JSONPath 式では、準拠するルールが異なります。これにより、非互換性の問題が発生する可能性があります。

  • GET_JSON_OBJECT 関数は JSONPath 式の構文をサポートしていません。

JSON データ型の入力パラメーター

  • 構文

    string get_json_object(json <json>, string <json_path>)
  • 説明

    JSONPath に基づいて、標準の 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:無効な JSONPath が指定された場合、戻り値は 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 文字列から単一の文字列を抽出します。この関数は呼び出すたびに元のデータを読み取ります。そのため、繰り返し呼び出すと、システムパフォーマンスに影響し、コストが増加する可能性があります。繰り返し呼び出すのを避けるには、GET_JSON_OBJECT 関数を UDTF と共に使用します。詳細については、「MaxCompute 組み込み関数と UDTF を使用した JSON ログデータの変換」をご参照ください。

  • パラメーター

    • json:必須。STRING 型の値。このパラメーターは、{Key:Value, Key:Value,...} の形式で標準の JSON オブジェクトを指定します。文字列に二重引用符 (") が含まれている場合は、抽出前に 2 つのバックスラッシュ (\\) を使用して二重引用符 (") をエスケープします。文字列に一重引用符 (') が含まれている場合は、抽出前に 1 つのバックスラッシュ (\) を使用して一重引用符 (') をエスケープします。

    • 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 が存在する場合、対応する文字列が返されます。

    • セッションでodps.sql.udf.getjsonobj.new パラメーターを指定して、この関数が値を返す方法を制御できます。

      • set odps.sql.udf.getjsonobj.new=true; 文を実行すると、この関数は値を返すときに元の文字列を保持します。

        この設定を使用することを推奨します。これにより、関数の戻り値の動作がより標準的になり、データ処理が容易になるとともに、パフォーマンスも向上します。MaxCompute プロジェクトに、この関数で JSON 予約文字をエスケープするジョブが存在する場合、検証不足によるエラーを防ぐために、元のエスケープ操作を維持することを推奨します。 この関数は、値を返す際に次のルールに準拠します。

        • この設定では、戻り値は JSON 文字列のままであり、REPLACE または REGEXP_REPLACE 関数を使用してバックスラッシュ (\) を置き換える必要なく、JSON データとして解析できます。

        • JSON オブジェクトでは重複キーが許可されます。重複キーが存在する場合、データを解析できます。

          -- 戻り値は 1 です。
          select get_json_object('{"a":"1","a":"2"}', '$.a');
        • 絵文字に対応するエンコードされた文字列がサポートされています。ただし、DataWorks では絵文字を入力することはできません。DataWorks では、Data Integration などのツールを使用して、絵文字に対応するエンコードされた文字列のみを MaxCompute に入力できます。DataWorks はGET_JSON_OBJECT 関数を使用してデータを処理します。

          -- 戻り値は絵文字です。
          select get_json_object('{"a":"<Emoji>"}', '$.a');
        • キーの元の順序が保持されます。

          -- 戻り値は {"b":"1","a":"2"} です。
          select get_json_object('{"b":"1","a":"2"}', '$');
      • set odps.sql.udf.getjsonobj.new=false; 文を実行すると、この関数は値を返すときに JSON 予約文字をエスケープします。この関数は、値を返す際に次のルールに準拠します。

        • 改行 (\n) や引用符 (") などの JSON 予約文字は、'\n' および'\"' として表示されます。

        • JSON オブジェクトの各キーは一意である必要があります。重複キーが存在する場合、データの解析に失敗する可能性があります。サンプル文:

          -- 戻り値は null です。
          select get_json_object('{"a":"1","a":"2"}', '$.a');
        • 絵文字に対応するエンコードされた文字列は解析できません。サンプル文:

          -- 戻り値は null です。
          select get_json_object('{"a":"<Emoji>"}', '$.a');
        • 出力結果はアルファベット順に表示されます。サンプル文:

          -- 戻り値は {"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 予約文字をエスケープします。次の例は、お使いの MaxCompute プロジェクトでGET_JSON_OBJECT 関数がどのように値を返すかを確認するのに役立ちます。

      select get_json_object('{"a":"[\\"1\\"]"}', '$.a');
      -- JSON予約文字がエスケープされて返されます。
      [\"1\"]
      
      -- 元の文字列を返します。
      ["1"]

      GET_JSON_OBJECT 関数が元の文字列を保持するように設定を依頼するには、 申請を提出するか、DingTalk グループ ID 11782920 を検索して MaxCompute 開発者コミュニティ DingTalk グループに参加し、MaxCompute のテクニカルサポートエンジニアに依頼してください。これにより、セッションごとに set odps.sql.udf.getjsonobj.new=false; を頻繁に指定する必要がなくなります。

    • 例 1:JSON オブジェクトsrc_json.json から情報を抽出します。サンプル文:

      -- JSON文字列 src_json.json には次の内容が含まれています:
      +----+
      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"
      }
      -- ownerフィールドの情報を抽出し、amyを返します。
      select get_json_object(src_json.json, '$.owner') from src_json;
      -- store.fruitフィールドの最初の配列の情報を抽出し、{"weight":8,"type":"apple"} を返します。
      select get_json_object(src_json.json, '$.store.fruit[0]') from src_json;
      -- 存在しないフィールドの情報を抽出し、nullを返します。
      select get_json_object(src_json.json, '$.non_exist_key') from src_json;
    • 例 2:ARRAY 型の JSON オブジェクトから情報を抽出します。サンプル文:

      -- 戻り値は 2222 です。
      select get_json_object('{"array":[["aaaa",1111],["bbbb",2222],["cccc",3333]]}','$.array[1][1]');
      -- 戻り値は ["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[*]');
      -- 戻り値は ["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[*]');
      -- 戻り値は h1 です。
      select get_json_object('{"aaa":"bbb","ccc":{"ddd":"eee","fff":"ggg","hhh":["h0","h1","h2"]},"iii":"jjj"}','$.ccc.hhh[1]');
    • 例 3: ピリオド (.) を含む JSON オブジェクトから情報を抽出します。サンプルステートメント:

      -- テーブルを作成します。
      create table mf_json (id string, json string);
      -- テーブルにデータを挿入します。データのキーにはピリオド (.) が含まれています。
      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 into table mf_json (id, json) values ("2", "{
      \"China_beijing\":{\"school\":{\"id\":0,\"book\":[{\"title\": \"A\",
      \"price\": 8.95},{\"title\": \"B\",\"price\": 10.2}]}}}");
      -- キーが China.beijing であるJSONオブジェクトのidの値を照会します。0が返されます。キーにピリオド (.) が含まれているため、MaxComputeがキーを解析できるよう、[''] を使用してキーを指定する必要があります。
      select get_json_object(json, "$['China.beijing'].school['id']") from mf_json where id =1;
      -- キーが China_beijing であるJSONオブジェクトのidの値を照会します。0が返されます。次のいずれかの文を使用できます:
      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 パラメーターが空または無効です。サンプル文:

      -- 戻り値は null です。
      select get_json_object('','$.array[1][1]');
      -- 戻り値は null です。
      select get_json_object('"array":["aaaa",1111],"bbbb":["cccc",3333]','$.array[1][1]');
    • 例 5:JSON 文字列をエスケープします。サンプル文:

      set odps.sql.udf.getjsonobj.new=true;
      -- 戻り値は "1" です。
      select get_json_object('{"a":"\\"1\\"","b":"2"}', '$.a'); 
      -- 戻り値は '1' です。
      select get_json_object('{"a":"\'1\'","b":"2"}', '$.a'); 

INITCAP

  • 構文

    string initcap(<str>)
  • 説明

    str をタイトルケースに変換します。スペースで区切られた各単語は、先頭文字が大文字に、残りの文字が小文字になります。

  • パラメーター

    str :必須。STRING 型。入力文字列。

  • 戻り値

    各単語の先頭文字が大文字に、残りの文字が小文字になった文字列を返します。

  • -- "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、末尾から 2 番目の文字の位置は -2 となり、以降同様です。

    • nth_appearance:任意。0 より大きい BIGINT 型の値。このパラメーターは、str1 内における str2nth_appearance 回目の出現位置を指定します。nth_appearance が別のデータ型である場合、または 0 以下の場合、エラーが返されます。

  • 戻り値

    BIGINT 型を返します。戻り値は次のルールに従います:

    • str1str2 が含まれない場合、0 を返します。

    • str2 が空の場合、常に一致します。例:select instr('abc',''); は 1 を返します。

    • str1str2start_position、または nth_appearance が NULL の場合、NULL を返します。

    • 例 1:文字列 Tech on the net 内で文字 e の位置を検索します。サンプルステートメント:

      -- 2 を返します。
      select instr('Tech on the net', 'e');
    • 例 2:文字列 Tech on the net 内で部分文字列 on の位置を検索します。サンプルステートメント:

      -- 6 を返します。
      select instr('Tech on the net', 'on');
    • 例 3:3 文字目から、文字列 Tech on the net 内で文字 e が 2 回目に出現する位置を検索します。サンプルステートメント:

      -- 14 を返します。
      select instr('Tech on the net', 'e', 3, 2);
    • 例 4:入力パラメーターのいずれかが NULL の場合。サンプルステートメント:

      -- 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 型。空文字列は、任意の文字セットに対して有効です。

    • from_encodingto_encoding:必須。STRING 型。ソースとターゲットの文字セット。

  • 戻り値

    BOOLEAN 型を返します。戻り値は次のとおりです。

    • str が正常に変換された場合は true を、それ以外の場合は false を返します。

    • strfrom_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 オブジェクトの path を記述するために使用されます。値はドル記号($)で始めることはできません。一度に複数のキーを入力できます。MaxCompute は、. または [''] を使用して JSON オブジェクトを解析します。JSON オブジェクトのキーにピリオド (.) が含まれている場合は、[''] を使用できます。

  • 戻り値

    STRING 型の値が返されます。

    説明
    • json が空または無効な場合、null が返されます。

    • key が空、無効、または JSON 文字列に存在しない場合、null が返されます。

    • json が有効で key が存在する場合、関連する文字列が返されます。

    • この関数は、中国語が含まれる JSON データを解析できます。

    • この関数は、ネストされた JSON データを解析できます。

    • この関数は、ネストされた配列を含む JSON データを解析できます。

    • 解析操作は、set odps.sql.udf.getjsonobj.new=true; とともに GET_JSON_OBJECT を実行することと同じです。JSON 文字列から複数のオブジェクトを取得するには、GET_JSON_OBJECT 関数を複数回呼び出す必要があります。その結果、JSON 文字列は複数回解析されます。JSON_TUPLE 関数を使用すると、一度に複数のキーを入力でき、JSON 文字列は一度だけ解析されます。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>) 
  • 説明

    文字列 strsplit1 でキーと値のペアに分割し、split2 でペアを区切り、key に対応する値を返します。

  • パラメーター

    • str: 必須。STRING 型。分割する文字列。

    • split1split2: 任意。STRING 型。分割用の区切り文字列です。指定されていない場合、デフォルトの split1";" で、split2":" です。split1 で分割された部分文字列に複数の split2 が含まれる場合、結果は未定義になります。

    • key: 必須。 STRING 型。 split1split2 で分割した後、 key の値を返します。

  • 戻り値

    STRING 型を返します。戻り値は次のルールに従います。

    • split1 または split2 が NULL の場合、NULL を返します。

    • str または key が NULL であるか、一致する key が存在しない場合、NULL を返します。

    • 複数のキーと値のペアが一致する場合、最初に一致したキーの値を返します。

    • 例 1: 文字列 0:1/;1:2 をキーと値のペアに分割し、キー 1 の値を返します。サンプルステートメント:

      -- 2 を返します。
      select keyvalue('0:1/;1:2', '1');

      split1split2 パラメーターは指定されていません。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\;” を、split1 に “\;”、split2 に ":" を使用して分割し、キー tf の値を返します。サンプルステートメント:

      -- 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)
  • 説明

    文字列 strsplit1 でペアに分割し、split2 で各ペアをキーと値に分割して、複数の key の値を返します。

  • パラメーター

    • str:必須。STRING 型。分割する文字列。

    • split1split2:必須。STRING 型。分割用のデリミタ文字列。split1 で分割された部分文字列に複数の split2 が含まれている場合、結果は未定義です。

    • key: 必須。 STRING 型。 split1split2 で分割した後、key の値を返します。

  • 戻り値

    STRING 型を返します。戻り値は次のルールに従います:

    • split1 または split2 が NULL の場合、NULL を返します。

    • str または key が NULL の場合、または一致する key が存在しない場合は、NULL を返します。

  • -- テーブルを作成
    create table mf_user (
    user_id string,
    user_info string
    );
    -- データを挿入
    insert into mf_user values('1','age:18;genda:f;address:abc'),('2','age:20;genda:m;address:bcd');
    -- クエリ
    SELECT user_id,
    KEYVALUE(user_info,';',':','age') as age,
    KEYVALUE(user_info,';',':','genda') as genda,
    KEYVALUE(user_info,';',':','address') as address
    FROM mf_user;
    -- KEYVALUE クエリと同等
    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 の長さを計算する場合。サンプル文:

      -- 15 を返します。
      select length('Tech on the net');
    • 例 2:入力パラメーターが NULL の場合。サンプル文:

      -- 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 のバイト長を計算します。

      -- 15 を返します。
      select lengthb('Tech on the net');
    • 例 2:入力パラメーターが NULL の場合。

      -- NULL を返します。
      select lengthb(null);

LOCATE

  • 構文

    bigint locate(string <substr>, string <str>[, bigint <start_pos>]) 
  • 説明

    文字列 str 内で部分文字列 substr の位置を検索します。start_pos を使用して開始位置 (1 から始まる) を指定します。

  • パラメーター

    • substr:必須。STRING 型。検索する部分文字列。

    • str:必須。STRING 型。検索対象の文字列。

    • start_pos:任意。BIGINT 型。検索の開始位置。

  • 戻り値

    BIGINT 型を返します。戻り値は次のルールに従います:

    • strsubstr が含まれない場合、0 を返します。

    • str または substr が NULL の場合、NULL を返します。

    • start_pos が NULL の場合、0 を返します。

    • 例 1:文字列 abchelloabc 内で文字列 ab の位置を検索します。サンプル文:

      -- 1 を返します。
      select locate('ab', 'abchelloabc');
    • 例 2:文字列 abc,hello,ab,c 内で文字列 hi の位置を検索します。サンプル文:

      -- 0 を返します。
      select locate('hi', 'abc,hello,ab,c');
    • 例 3:start_pos が NULL の場合。サンプル文:

      -- 0 を返します。
      select locate('ab', 'abhelloabc', null);

LPAD

  • 構文

    string lpad(string <str1>, int <length>, string <str2>)
  • 説明

    文字列 str1 を、文字列 str2 を使って、長さ length になるまで左にパディングします。この関数は MaxCompute V2.0 の拡張機能です。

  • パラメーター

    • str1:必須。STRING 型。左にパディングする文字列。

    • length:必須。INT 型。パディング後の文字列の長さ。

    • str2:必須。パディング文字列。

  • 戻り値

    STRING 型を返します。戻り値は次のルールに従います:

    • lengthstr1 の長さより短い場合、str1 の先頭から length 文字を返します。

    • length が 0 の場合、空の文字列を返します。

    • いずれかの入力パラメーターが NULL の場合、NULL を返します。

    • 例 1:文字列 12 を使い、文字列 abcdefgh を長さ 10 になるまで左にパディングします。サンプルコマンドは次のとおりです。

      -- 12abcdefgh を返します。
      select lpad('abcdefgh', 10, '12');
    • 例 2: 文字列 12 を使用して、文字列 abcdefgh を長さが 5 文字になるように左パディングします。以下はサンプルコマンドです。

      -- abcde を返します。
      select lpad('abcdefgh', 5, '12');
    • 例 3:length が 0 の場合。サンプル文:

      -- 空の文字列を返します。
      select lpad('abcdefgh', 0, '12');
    • 例 4:入力パラメーターのいずれかが NULL の場合。サンプル文:

      -- NULL を返します。
      select lpad(null, 0, '12');

LTRIM

  • 構文

    string ltrim(string <str>[, <trimChars>])
    string trim(leading [<trimChars>] from <str>)
  • 説明

    str の左端から文字を削除します。

    • trimChars を指定しない場合、デフォルトで先頭のスペースを削除します。

    • trimChars を指定すると、関数は trimChars 内の文字をセットとして扱い、str の左端から、trimChars セット内の文字のみで構成される、可能な限り長い部分文字列を削除します。

  • パラメーター

    • str:必須。STRING 型。トリミング対象の文字列。入力が BIGINT、DECIMAL、DOUBLE、DATETIME 型の場合、STRING 型に暗黙的に変換されます。

    • trimChars:任意。STRING 型。削除する文字。

  • 戻り値

    STRING 型を返します。戻り値は次のルールに従います。

    • str が STRING、BIGINT、DOUBLE、DECIMAL、DATETIME のいずれの型でもない場合、エラーが返されます。

    • str または trimChars が NULL の場合、NULL を返します。

    • 例 1:文字列 yxTxyomxx から先頭のスペースを削除します。使用例:

      -- 'yxTxyomxx ' を返します。
      select ltrim(' yxTxyomxx ');
      -- 以下と同等です。
      select trim(leading from ' yxTxyomxx ');
    • 例 2:文字列 yxTxyomxx から、セット xy に含まれる文字で構成される先頭部分を削除します。

      -- Txyomxx を返します。先頭の x または y はすべて削除されます。
      select ltrim('yxTxyomxx', 'xy');
      -- 以下と同等です。
      select trim(leading 'xy' from 'yxTxyomxx');
    • 例 3:入力パラメーターが NULL の場合。使用例:

      -- NULL を返します。
      select ltrim(null);
      select ltrim('yxTxyomxx', null);

MASK_HASH

  • 構文

    mask_hash(<expr>)
  • 説明

    文字列式 expr から計算されたハッシュ値を返します。ハッシュ値が同一の場合は、元の式の値も同一であることを示します。

  • パラメーター

    expr:必須。ハッシュ計算の対象となる文字列式。STRING、CHAR、VARCHAR、BINARY 型をサポートします。

  • 戻り値

    32バイトのハッシュ値を返します。文字列以外の式の場合、NULL を返します (Hive 互換)。

  • -- abc のハッシュを返します
    select mask_hash("abc");
    -- 結果
    +------------+
    | _c0        |
    +------------+
    | ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad |
    +------------+
    
    -- 文字列以外の入力に対して NULL を返します
    select mask_hash(100);
    -- 結果
    +------------+
    | _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 ハッシュを計算します。サンプルステートメント:

      -- ddc4c4796880633333d77a60fcda9af6 を返します。
      select md5('Tech on the net');
    • 例2:入力パラメーターに NULL を指定します。ステートメントの例:

      -- 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 型を返します。戻り値は次のルールに従います:

    • urlpart、または key が NULL の場合、NULL を返します。

    • part が無効な場合、エラーを返します。

  • -- example.com を返します。
    select parse_url('file://username:password@example.com:8042/over/there/index.dtb?type=animal&name=narwhal#nose', 'HOST');
    -- /over/there/index.dtb を返します。
    select parse_url('file://username:password@example.com:8042/over/there/index.dtb?type=animal&name=narwhal#nose', 'PATH');
    -- animal を返します。
    select parse_url('file://username:password@example.com:8042/over/there/index.dtb?type=animal&name=narwhal#nose', 'QUERY', 'type');
    -- nose を返します。
    select parse_url('file://username:password@example.com:8042/over/there/index.dtb?type=animal&name=narwhal#nose', 'REF');
    -- file を返します。
    select parse_url('file://username:password@example.com:8042/over/there/index.dtb?type=animal&name=narwhal#nose', 'PROTOCOL');
    -- username:password@example.com:8042 を返します。
    select parse_url('file://username:password@example.com:8042/over/there/index.dtb?type=animal&name=narwhal#nose', 'AUTHORITY');
    -- username:password を返します。
    select parse_url('file://username:password@example.com:8042/over/there/index.dtb?type=animal&name=narwhal#nose', 'USERINFO');

PARSE_URL_TUPLE

  • 構文

    tuple<string, string, ...> parse_url_tuple(string <url>, string <key1>, string <key2>,...)
  • 説明

    url を解析し、入力キー key1key2 などで指定した文字列を抽出します。PARSE_URL と似ていますが、複数のキーを同時に抽出でき、パフォーマンスも優れています。

  • パラメーター

    • url:必須。STRING 型。URL。無効な URL の場合はエラーを返します。

    • key1key2:必須。STRING 型。抽出するキー。有効な値:

      • HOST:ホストアドレス (ドメインまたは IP)。

      • PATH:サーバー上のネットワークリソースへのパス。

      • QUERY:クエリ文字列 (クエリの内容)。

      • REF:URL のフラグメント識別子で、# 記号の後の内容です。

      • PROTOCOL:プロトコルタイプ。

      • AUTHORITY:サーバーのドメイン/IP、ポート、ユーザー認証情報 (ユーザー名、パスワード)。

      • 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>])
  • 説明

    sourcestart_position から、指定された pattern に一致する部分文字列をカウントします。

  • パラメーター

    • source: 必須。 STRING 型。 検索する文字列。 他の型ではエラーが返されます。

    • pattern: 必須。 STRING 定数または正規表現。 一致させるパターン。 regex ガイドラインの詳細については、「RLIKE 文字列マッチング」をご参照ください。 空または無効な pattern はエラーを返します。

    • start_position: 任意。BIGINT 型の定数です。このパラメーターの値は 0 より大きい必要があります。値が別のデータ型であるか、0 以下の場合、エラーが返されます。このパラメーターを指定しない場合、デフォルト値は 1 です。この値は、検索が source 文字列の最初の文字から開始されることを示します。

  • 戻り値

    BIGINT 型を返します。戻り値は次のルールに従います:

    • 一致が見つからない場合、0 を返します。

    • sourcepattern、または start_position が NULL の場合、NULL を返します。

    • 例 1: abababc の指定された位置から、一致する部分文字列をカウントします。ステートメント例:

      -- 1 が返されます。
      select regexp_count('abababc', 'a.c');
      -- 2 が返されます。
      select regexp_count('abababc', '[[:alpha:]]{2}', 3);
    • 例 2:入力パラメーターのいずれかが NULL の場合。サンプルステートメント:

      -- NULL が返されます。
      select regexp_count('abababc', null);
    • 例 3: JSON 文字列 {"account_id":123456789,"account_name":"allen","location":"hangzhou","bill":100} 内の : の出現回数をカウントします。サンプルステートメント:

      -- 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 の正規表現仕様に従います。1.0 および 2.0 データ型バージョンでは、MaxCompute の仕様に従います。

  • 説明

    文字列 sourcepattern でグループに分割し、グループ groupid の文字列を返します。

  • パラメーター

    • source :必須。STRING 型。分割する文字列。

    • pattern :必須。STRING 定数または正規表現。一致させるパターン。正規表現のガイドラインの詳細については、「RLIKE 文字列照合」をご参照ください。

    • groupid :任意。BIGINT 定数。0 以上である必要があります。

    説明

    データは UTF-8 フォーマットで保存されています。漢字は [\\x{4e00}, \\x{9fa5}] の範囲内の 16 進数で表現できます。

  • 戻り値

    STRING 型を返します。戻り値は次のルールに従います:

    • pattern が空の文字列であるか、pattern にグループが指定されていない場合、エラーを返します。

    • groupid が BIGINT 型でないか、0 未満の場合、エラーを返します。このパラメーターを指定しない場合、デフォルト値は 1 で、最初のグループの部分文字列を返します。groupid が 0 に設定されている場合、pattern 全体に一致する部分文字列を返します。

    • sourcepattern、または 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 以上である必要があります。このパラメーターを指定しない場合、グループ ID1 のグループがパターンの照合に使用されます。このパラメーターを 0 に設定した場合、pattern 全体が一致の対象になります。

  • 戻り値

    ARRAY 型の値を返します。グループ ID を指定した場合、指定した グループ ID の一致結果をすべて含む配列を返します。グループ ID を指定しない場合、グループ ID1 の一致結果をすべて含む配列を返します。

    • グループ ID を指定しない場合、デフォルトでは最初の グループ ID に一致する結果を返します。

      SELECT regexp_extract_all('100-200, 300-400', '(\\d+)-(\\d+)');

      戻り値:

      +------------+
      | _c0        |
      +------------+
      | [100,300] |
      +------------+
    • グループ ID の値を 2 に設定した場合、2 番目の グループ ID の一致結果を返します。

      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 から検索を開始し、source 内で pattern に一致する部分文字列の、occurrence で指定された出現箇所の開始位置または終了位置を返します。

  • パラメーター

    • source:必須。ソース文字列。データ型は STRING である必要があります。

    • pattern:必須。一致させるパターン。値には STRING 定数または正規表現を指定できます。正規表現の詳細については、「RLIKE 文字列照合」をご参照ください。pattern が空の場合はエラーが返されます。

    • start_position:任意。検索を開始する位置。値は BIGINT 定数である必要があります。デフォルト値は 1 です。

    • occurrence:任意。検索対象の出現回数。値は BIGINT 定数である必要があります。デフォルト値は 1 で、最初の一致を示します。

    • return_option:任意。返す位置。値は BIGINT 定数である必要があります。有効な値:0 は開始位置を、1 は終了位置を示します。デフォルト値は 0 です。無効な値を指定すると、エラーが返されます。

  • 戻り値

    戻り値は BIGINT 型です。return_option パラメーターは、source 内の一致した部分文字列の開始位置または終了位置を返すかどうかを指定します。戻り値は次のルールによって決定されます。

    • pattern が空の場合、エラーが返されます。

    • start_position または occurrence の値が BIGINT 定数でない場合、または 0 以下の場合、エラーが返されます。

    • sourcepatternstart_positionoccurrence、または return_option の値が NULL の場合、NULL が返されます。

    • 例 1:文字列 i love www.taobao.com 内で、位置 3 から検索し、o[[:alpha:]]{1} に一致する部分文字列の 2 番目の出現箇所の開始位置を返します。サンプル文:

      -- 14 を返します。
      select regexp_instr('i love www.taobao.com', 'o[[:alpha:]]{1}', 3, 2);
    • 例 2:文字列 i love www.taobao.com 内で、o[[:alpha:]]{1} に一致する部分文字列の 2 番目の出現箇所の終了位置を返します。検索は 3 番目の文字から開始します。サンプル文:

      -- 16 を返します。
      select regexp_instr('i love www.taobao.com', 'o[[:alpha:]]{1}', 3, 2, 1);
    • 例 3:入力パラメーターが NULL の場合。サンプル文:

      -- 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 の正規表現仕様に従います。データ型 1.0 および 2.0 の場合、MaxCompute の仕様に従います。

  • 説明

    source 文字列内で pattern に一致する部分文字列のうち、occurrence で指定された N 番目のものを replace_string に置き換え、結果を返します。

  • パラメーター

    • source:必須。STRING 型。変更するソース文字列です。

    • pattern:必須。STRING 型の定数または正規表現。照合するパターンです。正規表現のルールの詳細については、「RLIKE 文字列照合」をご参照ください。pattern が空文字列の場合、エラーが返されます。

    • replace_string:必須。STRING 型。pattern に一致する部分文字列を置き換える文字列です。

      説明
      • replace_string が空文字列の場合、この関数は pattern に一致する部分文字列を削除します。

      • replace_string には \n の形式で後方参照を含めることで、pattern 内の n 番目のキャプチャグループに一致する部分文字列を挿入できます。n は 1 から 9 までの整数です。\0 は、pattern に一致する部分文字列全体を挿入します。バックスラッシュは \\1 のようにエスケープするか、R'(\1)' のように raw 文字列を使用する必要があります。

    • occurrence:任意。0 以上の BIGINT 型の定数。このパラメーターは、pattern に一致する部分文字列のうち、何番目の出現箇所を replace_string で置き換えるかを指定します。このパラメーターを 0 に設定すると、一致するすべての部分文字列が置換されます。0 未満の場合や、データ型が異なる場合はエラーが返されます。デフォルト値:0。

  • 戻り値

    STRING 型の値を返します。戻り値は、次のルールによって決定されます:

    • 存在しないグループを参照した場合、結果は未定義です。

    • replace_string が NULL で、pattern の一致が見つかった場合、NULL が返されます。

    • replace_string が NULL で、pattern が一致しない場合、関数は元の文字列を返します。

    • sourcepattern、または occurrence が NULL の場合、NULL が返されます。

    • 例 1:指定されたルールに基づいて部分文字列を置換します。

      -- Abcd を返します。
      select regexp_replace("abcd", "a", "A", 0);
      -- bcd を返します。
      select regexp_replace("abcd", "a", "", 0);
      -- 19700101 を返します。
      select regexp_replace("1970-01-01", "-", "", 0);
      -- abc を返します。
      select regexp_replace("a1b2c3", "[0-9]", "", 0);
      -- a1b2c を返します。
      select regexp_replace("a1b2c3", "[0-9]", "", 3);
    • 例 2:文字列 123.456.7890 内で、パターン ([[:digit:]]{3})\\.([[:digit:]]{3})\\.([[:digit:]]{4}) に一致するすべての箇所を (\\1)\\2-\\3 に置き換えます。サンプルステートメント:

      -- (123)456-7890 を返します。
      select regexp_replace('123.456.7890', '([[:digit:]]{3})\\.([[:digit:]]{3})\\.([[:digit:]]{4})',
      '(\\1)\\2-\\3', 0);
    • 例 3:指定されたルールに基づいて、文字列 abcd 内のパターンに一致する部分文字列を置換します。サンプルステートメント:

      -- a b c d  を返します。
      select regexp_replace('abcd', '(.)', '\\1 ', 0);
      -- a bcd を返します。
      select regexp_replace('abcd', '(.)', '\\1 ', 1);
      -- d を返します。
      select regexp_replace("abcd", "(.*)(.)$", "\\2", 0);
    • 例 4:url_set テーブルには、値が www.simple@xxx.com の形式である URL 列が含まれています。xxx の部分は各行で一意です。この例では、www の後のすべての文字を置き換えます。サンプルステートメント:

      -- wwwtest を返します。
      select regexp_replace(url,'(www)(.*)','wwwtest',0) from url_set;
    • 例 5:入力パラメーターが NULL です。サンプルステートメント:

      -- NULL を返します。
      select regexp_replace('abcd', '(.)', null, 0);
    • 例 6:存在しないグループを参照します。サンプルステートメント:

      -- パターンではグループが1つしか定義されていないため、2番目のグループは参照できません。
      -- この使用法は避けてください。結果は未定義です。
      regexp_replace("abcd", "(.)", "\\2", 0) = "" or "abcd"
      -- パターンにグループが含まれていないため、\1 は存在しないグループを参照しています。
      -- この使用法は避けてください。結果は未定義です。
      regexp_replace("abcd", "a", "\\1", 0) = "bcd" or "abcd"

REGEXP_SUBSTR

  • 構文

    string regexp_substr(string <source>, string <pattern>[, bigint <start_position>[, bigint <occurrence>]])
  • 説明

    ソース 文字列内の 開始位置 から、パターン出現回数 番目に一致する部分文字列を返します。

  • パラメーター

    • ソース:必須。STRING 型。検索対象の文字列。

    • パターン:必須。STRING 型の定数または正規表現。照合するパターン。正規表現の構文については、「RLIKE 文字列照合」をご参照ください。

    • 開始位置:任意。BIGINT 型の定数。値は 0 より大きい必要があります。このパラメーターを指定しない場合、デフォルト値は 1 であり、ソース 文字列の先頭文字から検索が開始されることを意味します。

    • 出現回数:任意。BIGINT 型の定数。値は 0 より大きい必要があります。デフォルト値は 1 で、最初の一致を示します。

  • 戻り値

    STRING 型の値を返します。戻り値は次のルールに従います。

    • パターン が空の場合、エラーになります。

    • 一致が見つからない場合、NULL を返します。

    • 開始位置 または 出現回数 が BIGINT 型でないか、0 以下の場合、エラーになります。

    • ソースパターン開始位置、または 出現回数 が NULL の場合、NULL を返します。

    • 例 1:文字列 I love aliyun very much の中から、指定されたパターンに一致する部分文字列を返します。サンプル文:

      -- aliyun を返します。
      select regexp_substr('I love aliyun very much', 'a[[:alpha:]]{5}');
      -- ' have' を返します。
      select regexp_substr('I have 2 apples and 100 bucks!', '[[:blank:]][[:alnum:]]*', 1, 1);
      -- ' 2' を返します。
      select regexp_substr('I have 2 apples and 100 bucks!', '[[:blank:]][[:alnum:]]*', 1, 2);
    • 例 2:入力パラメーターのいずれかが NULL の場合。サンプル文:

      -- NULL を返します。
      select regexp_substr('I love aliyun very much', null);

REPEAT

  • 構文

    STRING repeat(STRING <str>, BIGINT <n>)
  • 説明

    文字列 strn 回繰り返した文字列を返します。

  • パラメーター

    • str:必須。STRING 型。入力が BIGINT 型、DOUBLE 型、DECIMAL 型、または DATETIME 型の場合、STRING 型に暗黙的に変換されます。

    • n:必須。BIGINT 型。返される文字列のサイズは 2 MB を超えることはできません。

  • 戻り値

    STRING 型の値を返します。戻り値は次のルールに従います。

    • str が STRING 型、BIGINT 型、DOUBLE 型、DECIMAL 型、または DATETIME 型でない場合、エラーが返されます。

    • n が負の値の場合、エラーが返されます。

    • str または n のいずれかが NULL の場合、NULL が返されます。

    • 例 1:文字列 abc5 回繰り返します。サンプルステートメント:

      -- abcabcabcabcabc を返します。
      select repeat('abc', 5); 
    • 例 2:入力パラメーターの 1 つが NULL の場合。サンプルステートメント:

      -- NULL を返します。
      select repeat('abc', null);

REPLACE

  • 構文

    string replace(string <str>, string <old>, string <new>)
  • 説明

    str 内の old のすべての出現箇所を new に置換し、変更後の str を返します。一致が見つからない場合は、元の str が返されます。この関数は MaxCompute V2.0 の拡張関数です。

  • パラメーター

    • str:必須。STRING 型。ソース文字列。

    • old:必須。STRING 型。比較する文字列。

    • new:必須。STRING 型。置換文字列。

  • 戻り値

    STRING 型の値を返します。いずれかの入力パラメーターが NULL の場合、NULL を返します。

    • 例 1:文字列 ababab 内の部分文字列 abab をすべて 12 に置換します。サンプル文:

      -- 12ab を返します。
      select replace('ababab','abab','12');
    • 例 2:いずれかの入力パラメーターが NULL の場合。サンプル文:

      -- NULL を返します。
      select replace('123abab456ab',null,'abab');

REVERSE

  • 構文

    string reverse(string <str>)
  • 説明

    文字列 str を反転させた文字列を返します。

  • パラメーター

    str:必須。STRING 型のパラメーター。入力が BIGINT、DOUBLE、デシマル、または DATETIME の値の場合、STRING 型に暗黙的に変換されます。

  • 戻り値

    STRING 型の値を返します。次のルールが適用されます。

    • str のデータ型が STRING、BIGINT、DOUBLE、デシマル、または DATETIME でない場合、エラーを返します。

    • str が NULL の場合、NULL を返します。

    • 例 1:文字列 I love aliyun very much を反転させます。サンプルステートメント:

      -- hcum yrev nuyila evol I を返します
      select reverse('I love aliyun very much');
    • 例 2:入力パラメーターが NULL の場合。サンプルステートメント:

      -- NULL を返します
      select reverse(null);

RPAD

  • 構文

    string rpad(string <str1>, int <length>, string <str2>)
  • 説明

    パディング文字列 str2 を使用して、文字列 str1length 文字まで右パディングします。この関数は MaxCompute V2.0 の拡張です。

  • パラメーター

    • str1:必須。 STRING 型。右パディングの対象となる文字列。

    • length:必須。 INT 型。 0 以上である必要があります。パディング後の文字列の長さを指定します。

    • str2:必須。 STRING 型。パディングに使用する文字列。

  • 戻り値

    STRING 型を返します。戻り値は次のルールに従います:

    • lengthstr1 の長さより短い場合、str1 の先頭から length 文字を返します。

    • length が 0 の場合、空の文字列を返します。

    • いずれかの入力パラメーターが NULL の場合、NULL を返します。

    • 例 1:パディング文字列 12 を使用して、文字列 abcdefgh を 10 文字まで右パディングします。サンプルステートメント:

      -- abcdefgh12 を返します。
      select rpad('abcdefgh', 10, '12');
    • 例 2:パディング文字列 12 を使用して、文字列 abcdefgh を 5 文字まで右パディングします。サンプルステートメント:

      -- abcde を返します。
      select rpad('abcdefgh', 5, '12');
    • 例 3:length が 0 の場合。サンプルステートメント:

      -- 空文字列を返します。
      select rpad('abcdefgh' ,0, '12'); 
    • 例 4:入力パラメーターの 1 つが NULL の場合。サンプルステートメント:

      -- NULL を返します。
      select rpad(null ,0, '12');

RTRIM

  • 構文

    string rtrim(string <str>[, <trimChars>])
    string trim(trailing [<trimChars>] from <str>)
  • 説明

    str の末尾の文字を削除します。

    • trimChars が指定されていない場合、デフォルトでは末尾の空白が削除されます。

    • trimChars が指定されている場合、trimChars 内の文字はセットとして扱われます。str の末尾から、trimChars に含まれる文字のみで構成される最も長い部分文字列が削除されます。

  • パラメーター

    • str:必須。STRING 型。トリム対象の文字列です。入力が BIGINT、DECIMAL、DOUBLE、または DATETIME の場合、暗黙的に STRING 型に変換されます。

    • trimChars:任意。STRING 型。削除する文字です。

  • 戻り値

    STRING 型を返します。戻り値は次のルールに従います。

    • str が STRING、BIGINT、DOUBLE、DECIMAL、DATETIME のいずれの型でもない場合、エラーが返されます。

    • str または trimChars が NULL の場合、NULL を返します。

    • 例 1:文字列 yxTxyomxx から末尾の空白を削除します。サンプルステートメント:

      -- yxTxyomxx を返します。
      select rtrim(' yxTxyomxx ');
      -- 以下と同等です:
      select trim(trailing from ' yxTxyomxx ');
    • 例 2:文字列 yxTxyomxx の末尾から、文字セット xy に含まれる文字を削除します。

      -- yxTxyom を返します。末尾の x または y が削除されます。
      select rtrim('yxTxyomxx', 'xy');
      -- 以下と同等です:
      select trim(trailing 'xy' from 'yxTxyomxx');
    • 例 3:入力パラメーターが NULL です。サンプルステートメント:

      -- NULL を返します。
      select rtrim(null);
      select rtrim('yxTxyomxx', null);

SOUNDEX

  • 構文

    string soundex(string <str>)
  • 説明

    標準文字列を SOUNDEX 文字列に変換します。

  • パラメーター

    str:必須。変換する文字列。このパラメーターは STRING 型です。この関数は MaxCompute V2.0 の拡張機能です。

  • 戻り値

    戻り値は STRING 型です。str が NULL の場合、NULL を返します。

    • 例 1:文字列 hello を SOUNDEX 文字列に変換します。例文:

      -- H400 を返します。
      select soundex('hello');
    • 例 2:入力パラメーターが NULL の場合。例文:

      -- NULL を返します。
      select soundex(null);

SPACE

  • 構文

    string space(bigint <n>)
  • 説明

    n 個のスペースで構成される文字列を返します。

  • パラメーター

    n: 必須。BIGINT 型。値のサイズは 2 MB を超えることはできません。

  • 戻り値

    STRING を返します。戻り値は次のルールに従います。

    • n が空の場合、エラーを返します。

    • n が NULL の場合、NULL を返します。

  • -- 10 を返します。
    select length(space(10));

SPLIT

  • 構文

    ARRAY<STRING> SPLIT(STRING <source>, STRING <delimiter>[, BOOLEAN <trimTailEmpty>])
    
    -- 標準的な例。
    -- ["a","b","c"] を返します。
    SELECT SPLIT('a,b,c', ',');
  • パラメーター

      • source: 必須。STRING 型の値。このパラメーターは、分割する文字列を指定します。

      • delimiter: 必須。正規表現 構文をサポートする STRING 型のデリミタ。

      • trimTailEmpty: オプション。BOOLEAN 型の値。このパラメーターは、末尾の空の文字列を保持するかどうかを指定します。デフォルト値は true です。このパラメーターを false に設定すると、末尾の空の文字列が保持されます。

  • 戻り値

    ARRAY<STRING> 型の値を返します。

  • -- ["a"," b"," c"] が返されます。
    select split("a, b, c", ",");
    
    -- デフォルトでは空文字列は返されません。
    select split("a, b, c,,", ",");
    -- 次の結果が返されます:
    +------------+
    | _c0        |
    +------------+
    | ["a"," b"," c"] |
    +------------+
    
    -- 空文字列を返す必要がある場合は、次の文を実行します:
    select split("a, b, c,,", ",", false);
    -- 次の結果が返されます:
    +------------+
    | _c0        |
    +------------+
    | ["a"," b"," c","",""] |
    +------------+

SPLIT_PART

  • 構文

    string split_part(string <str>, string <separator>, bigint <start>[, bigint <end>])
  • 説明

    文字列 str を区切り文字 separator で分割し、start から end までの部分文字列を返します (閉区間)。

  • パラメーター

    • str: 必須。 STRING 型。 分割する文字列。 入力が BIGINTDOUBLEDECIMAL、または DATETIME の場合、暗黙的に STRING に変換されます。

    • separator: 必須。STRING 定数。区切り文字 (単一の文字または文字列)。

    • start: 必須。BIGINT 型の定数で、0 より大きい値にする必要があります。開始パート番号 (1 からカウント) です。

    • end: 返す終了セグメント番号を指定する、start 以上の BIGINT 型の定数です。このパラメーターを指定しない場合、その値は start の値がデフォルトとなり、start で指定されたセグメントのみが返されます。

  • 戻り値の説明

    STRING を返します。戻り値は、次のルールに従います:

    • start が実際のパーツ数を超えた場合 (たとえば、パーツ数が 6 で start > 6 の場合)、空の文字列が返されます。

    • separatorstr に見つからず、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 を分割し、指定された部分を返します。サンプルステートメント:

      -- a を返します。
      select split_part('a,b,c,d', ',', 1);
      -- a,b を返します。
      select split_part('a,b,c,d', ',', 1, 2);
    • 例 2: start が実際のパーツ数を超えています。サンプルステートメント:

      -- 空の文字列を返します。
      select split_part('a,b,c,d', ',', 10);
    • 例 3: strseparator が見つかりません。サンプルステートメント:

      -- a,b,c,d を返します。
      select split_part('a,b,c,d', ':', 1);
      -- 空の文字列を返します。
      select split_part('a,b,c,d', ':', 2);
    • 例 4:separator が空。サンプル文:

      -- a,b,c,d を返します。
      select split_part('a,b,c,d', '', 1);
    • 例 5: end が実際のパート数を超えています。サンプルステートメント:

      -- b,c,d を返します。
      select split_part('a,b,c,d', ',', 2, 6);
    • 例 6: separator 以外のすべての入力パラメーターが NULL です。サンプルステートメント:

      -- NULL を返します。
      select split_part('a,b,c,d', ',', null);

SUBSTR

  • 構文

    string substr(string <str>, bigint <start_position>[, bigint <length>])
  • 説明

    strstart_position から始まる、長さ length の部分文字列を返します。

  • パラメーター

    • str:必須。STRING 型。入力が BIGINT、DECIMAL、DOUBLE、または DATETIME の場合、STRING に暗黙的に変換されます。

    • start_position:必須。BIGINT 型。デフォルトの開始位置は 1 です。

      • Hive 互換データ型バージョン:start_position=0 の場合、位置 1 と同様に動作します。

      • 1.0 および 2.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 の末尾まで拡張されます。

    • strstart_position、または length が NULL の場合、NULL を返します。

    • 例 1:abc の部分文字列を、指定された位置から指定された長さで返します。サンプル文:

      -- bc を返します。
      select substr('abc', 2);
      -- b を返します。
      select substr('abc', 2, 1);
      -- bc を返します。
      select substr('abc',-2 , 2);
    • 例 2:入力パラメーターが NULL の場合。サンプル文:

      -- NULL を返します。
      select substr('abc', null);

SUBSTRING

  • 構文

    string substring(string|binary <str>, int <start_position>[, int <length>])
  • 説明

    strstart_position から始まる、長さ length の部分文字列を返します。

  • パラメーター

    • str:必須。このパラメーターは STRING 型または BINARY 型です。

    • start_position:必須。このパラメーターは INT 型です。開始位置は 1 ベースです。start_position が 0 の場合、空文字列が返されます。start_position が負の値の場合、位置は文字列の末尾から逆方向にカウントされます。この場合、-1 は最後の文字を指し、そこから逆順にカウントされます。

    • length:任意。このパラメーターは INT 型です。部分文字列の長さは 0 より大きい必要があります。

  • 戻り値

    戻り値は STRING 型です。次のルールに従います。

    • str が STRING 型または BINARY 型でない場合、エラーが返されます。

    • length が INT 型でないか、0 以下の場合、エラーが返されます。

    • length パラメーターが省略された場合、str の末尾までの部分文字列が返されます。

    • strstart_position、または length のいずれかが NULL の場合、NULL が返されます。

    • 例 1: この例では、指定した位置から指定した長さの abc の部分文字列を返します。 サンプルステートメント:

      -- bc を返します。
      select substring('abc', 2);
      -- b を返します。
      select substring('abc', 2, 1);
      -- bc を返します。
      select substring('abc',-2,2);
      -- ab を返します。
      select substring('abc',-3,2);
      -- 001 を返します。
      substring(bin(2345), 2, 3);
    • 例 2:この例では、入力パラメーターに NULL が含まれる場合を示します。サンプル文:

      -- NULL を返します。
      select substring('abc', null, null);

SUBSTRING_INDEX

  • 構文

    string substring_index(string <str>, string <separator>, int <count>)
  • 説明

    この関数は、区切り文字の count 回目の出現より前または後の部分文字列を、文字列 str から抽出します。count が正の場合、区切り文字の検索は左から開始されます。count が負の場合、検索は右から開始されます。この関数は MaxCompute V2.0 の拡張関数です。

  • パラメーター

    • str:必須。STRING 型。抽出元の文字列を指定します。

    • separator:必須。STRING 型の区切り文字。

    • count:必須。区切り文字の位置を指定する INT 値。

  • 戻り値

    この関数は STRING 型の値を返します。入力パラメーターのいずれかが NULL の場合、この関数は NULL を返します。

  • 使用例

    • 例 1: 文字列 https://www.alibabacloud.com から抽出します。ステートメントの例:

      -- https://www.alibabacloud を返します。
      select substring_index('https://www.alibabacloud.com', '.', 2);
      -- alibabacloud.com を返します。
      select substring_index('https://www.alibabacloud.com', '.', -2);
    • 例 2:入力パラメーターのいずれかが NULL の場合。サンプル文:

      -- NULL を返します。
      select substring_index('https://www.alibabacloud.com', null, 2);

TO_CHAR

  • 構文

    文字列 to_char(BOOLEAN <value>)
    文字列 to_char(BIGINT <value>)
    文字列 to_char(DOUBLE <value>)
    文字列 to_char(DECIMAL <value>)
  • 説明

    BOOLEAN、BIGINT、DECIMAL、または DOUBLE 型の値を文字列型に変換します。

  • パラメーター

    value:必須。BOOLEAN、BIGINT、DECIMAL、または DOUBLE 型の値。

  • 戻り値

    文字列型の値を返します。戻り値は次のルールに従います:

    • value が BOOLEAN、BIGINT、DECIMAL、または DOUBLE 型でない場合、エラーが返されます。

    • value が NULL の場合、この関数は NULL を返します。

    • 例 1:値を文字列型に変換。サンプルステートメント:

      -- 123 を返します。
      select to_char(123);
      -- TRUE を返します。
      select to_char(true);
      -- 1.23 を返します。
      select to_char(1.23);
    • 例 2:入力パラメーターが NULL の場合。サンプルステートメント:

      -- 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 の場合、key2:value2 は返される JSON 文字列には含まれません。

  • 戻り値

    JSON 文字列が返されます。

    • 例 1: 指定された複合データ型の式を JSON 文字列に変換します。サンプルステートメント:

      -- 戻り値は {"a":1,"b":2} です。
      select to_json(named_struct('a', 1, 'b', 2));
      -- 戻り値は {"time":"26/08/2015"} です。
      select to_json(named_struct('time', "26/08/2015"));
      -- 戻り値は [{"a":1,"b":2}] です。
      select to_json(array(named_struct('a', 1, 'b', 2)));
      -- 戻り値は {"a":{"b":1}} です。
      select to_json(map('a', named_struct('b', 1)));
      -- 戻り値は {"a":1} です。
      select to_json(map('a', 1));
      -- 戻り値は [{"a":1}] です。
      select to_json(array((map('a', 1))));
    • 例 2: 入力式が STRUCT 型です。サンプルステートメント:

      -- 戻り値は {"a":"B"} です。STRUCT 型の式が JSON 文字列に変換されると、すべてのキーは小文字に変換されます。
      select to_json(named_struct("A", "B"));
      -- 戻り値は {"k2":"v2"} です。null が属するキーと値のペアは、返される JSON 文字列には含まれません。
      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 :大文字を小文字に変換します。サンプル文:

      -- abcd を返します。
      select tolower('aBcd');
      -- 中国 fighting を返します。
      select tolower('中国Fighting');
    • 例 2 :入力パラメーターが NULL の場合です。サンプル文:

      -- 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:小文字を大文字に変換します。サンプルステートメント:

      -- ABCD を返します。
      select toupper('aBcd');
      -- 中国FIGHTING を返します。
      select toupper('中国Fighting');
    • 例 2:入力パラメーターが NULL の場合。サンプルステートメント:

      -- NULL を返します。
      select toupper(null);

TRANSLATE

  • 構文

    string translate(string|varchar <str1>, string|varchar <str2>, string|varchar <str3>)
  • 説明

    str1 内で、str2 に出現する各文字を、str3 の対応する文字に置き換えます。一致が見つからない場合、置き換えは行われません。この関数は MaxCompute V2.0 の拡張機能です。

  • 戻り値

    STRING を返します。入力パラメーターのいずれかが NULL の場合、この関数は NULL を返します。

    • 例 1:ababab 内で、abab に出現する各文字を、cd の対応する文字に置き換えます。サンプル文:

      -- cdcdcd を返します。
      select translate('ababab','abab','cd');
    • 例 2:ababab 内で、abab に出現する各文字を、cdefg の対応する文字に置き換えます。サンプル文:

      -- cdcdcd を返します。
      select translate('ababab','abab','cdefg');
    • 例 3:入力パラメーターのいずれかが NULL の場合。サンプル文:

      -- NULL を返します。
      select translate('ababab','cd',null);

TRIM

  • 構文

    string trim(string <str>[,<trimChars>])
    string trim([BOTH] [<trimChars>] from <str>)
  • 説明

    str の両端から文字を取り除きます:

    • trimChars を指定しない場合、関数はデフォルトで空白を削除します。

    • trimChars を指定すると、関数は trimChars の文字をセットとみなし、str の左右両端から、そのセット内の文字のみで構成される最も長い部分文字列を削除します。

  • パラメーター

    • str: 必須。STRING 型です。トリム対象の文字列です。入力が BIGINT、DECIMAL、DOUBLE、または DATETIME の場合、暗黙的に STRING に変換されます。

    • trimChars: 任意。STRING 型。削除する文字。

  • 戻り値

    STRING 型を返します。戻り値は次のルールに従います。

    • str が STRING、BIGINT、DOUBLE、DECIMAL、DATETIME のいずれの型でもない場合、エラーが返されます。

    • str または trimChars が NULL の場合、NULL を返します。

    • 例 1: 文字列 yxTxyomxx の両端からスペースを削除します。サンプルステートメント:

      -- yxTxyomxx を返します。
      select trim(' yxTxyomxx ');
      -- 以下と同等です:
      select trim(both from ' yxTxyomxx ');
      select trim(from ' yxTxyomxx ');
    • 例 2: 文字列 yxTxyomxx の両端から、セット xy に含まれるすべての文字を削除します。

      -- Txyom を返します。両端の x または y が削除されます。
      select trim('yxTxyomxx', 'xy');
      -- 以下と同等です:
      select trim(both 'xy' from 'yxTxyomxx');
      select trim('xy' from 'yxTxyomxx');
    • 例 3:入力パラメーターが NULL の場合。ステートメント例:

      -- 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 の逆です。デコーディングルールは次のとおりです:

    • a~z および A~Z は変更されません。

    • ピリオド (.)、ハイフン (-)、アスタリスク (*)、およびアンダースコア (_) は変更されません。

    • プラス記号 (+) はスペースに変換されます。

    • %xy フォーマットのシーケンスはバイト値に変換されます。連続するバイトは、指定した encoding 名を使用して文字列にデコードされます。

    • その他のすべての文字は変更されません。

  • パラメーター

    • input:必須。STRING 型の入力文字列です。

    • encoding:任意。エンコーディング形式を指定します。GBK や UTF-8 などのフォーマットをサポートしています。指定しない場合、デフォルトは UTF-8 です。

  • 戻り値

    UTF-8 でエンコードされた STRING 型の値を返します。input または encoding が NULL の場合、NULL を返します。

  • -- 示例for url_decode:// (fdsf) を返します。
    select url_decode('%E7%A4%BA%E4%BE%8Bfor+url_decode%3A%2F%2F+%28fdsf%29');
    -- 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 形式でエンコードします。エンコーディングルール:

    • a–z および A–Z の文字は変更されません。

    • ピリオド (.)、ハイフン (-)、アスタリスク (*)、アンダースコア (_) は変更されません。

    • スペースはプラス記号 (+) に変換されます。

    • その他すべての文字は、指定されたエンコーディングを使用してバイト値に変換されます。各バイトは %xy のように表示されます。ここで、xy は文字の 16 進数表現です。

  • パラメータ

    • input:必須。STRING 型。入力文字列。

    • encoding:任意。エンコーディングフォーマット。GBK や UTF-8 などのフォーマットをサポートしています。指定しない場合、デフォルトは UTF-8 です。

  • 戻り値

    STRING を返します。input または encoding が NULL の場合、NULL を返します。

  • -- examplefor+url_encode%3A%2F%2F+%28fdsf%29 を返します。
    select url_encode('examplefor url_encode:// (fdsf)');
    -- Example+for+url_encode+%3A%2F%2F+dsf%28fasfs%29 を返します。
    select url_encode('Example for url_encode:// dsf(fasfs)', 'GBK');

リファレンス

組み込み関数を超えて拡張するには、ユーザー定義関数 (UDF) を作成します。詳細については、「MaxCompute UDF の概要」をご参照ください。