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

MaxCompute:文字列関数

最終更新日:May 15, 2025

テーブルに格納されている文字列に対して、切り捨て、連結、変換、比較、検索などの操作を実行する場合、MaxCompute SQL でサポートされている文字列関数を使用できます。このトピックでは、MaxCompute SQL でサポートされている文字列関数の構文とパラメーターについて説明します。また、文字列関数の使用方法の例も示します。

次の表に、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 文字列と出力形式に基づいて、ARRAY、MAP、または STRUCT 型のデータを返します。

GET_JSON_OBJECT

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

INITCAP

文字列を指定された形式の文字列に変換します。この形式では、単語はタイトルケースで、スペースで区切られます。タイトルケースでは、各単語の最初の文字は大文字になり、各単語の他の文字は小文字になります。

INSTR

文字列 B 内の文字列 A の位置を返します。

IS_ENCODING

文字列をある文字セットから別の文字セットに変換できるかどうかを判断します。

JSON_TUPLE

入力キーのセットに基づいて、標準 JSON 文字列から文字列を抽出します。

KEYVALUE

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

KEYVALUE_TUPLE

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

LENGTH

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

LENGTHB

バイト単位で文字列の長さを計算します。

LOCATE

別の文字列内の指定された文字列の位置を返します。

LPAD

文字列を左詰めして指定された長さにします。

LTRIM

文字列の左側の文字を削除します。

MASK_HASH

文字列式に基づいてハッシュ値を返します。

MD5

文字列の MD5 値を返します。

PARSE_URL

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

PARSE_URL_TUPLE

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

REGEXP_COUNT

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

REGEXP_EXTRACT

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

REGEXP_EXTRACT_ALL

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

REGEXP_INSTR

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

REGEXP_REPLACE

部分文字列が指定された回数だけ指定されたパターンに一致する場合、別の文字列の部分文字列を文字列に置き換えます。

REGEXP_SUBSTR

指定された位置から、指定された回数だけ指定されたパターンに一致する文字列内の部分文字列を返します。

REPEAT

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

REPLACE

文字列 A 内の文字列 B に一致する部分文字列を別の部分文字列に置き換えます。

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

文字列 A の str2 に出現する部分を str3 に置き換えます。

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 に出現する文字の数を返します。

  • パラメーター

    str1 および str2:必須。STRING 型の値。値は有効な UTF-8 文字列である必要があります。2 つの文字列の比較中に無効な文字 (Unicode エンコードされていない文字) が見つかった場合、この関数は負の値を返します。

  • 戻り値

    BIGINT 型の値が返されます。str1 または str2 の値が null の場合は、null が返されます。

    • 例 1:文字列 aabc に属し、文字列 abcde に出現する文字の数を計算します。サンプルステートメント:

      -- 戻り値は 4 です。
      select char_matchcount('aabc','abcde');
    • 例 2:入力パラメーターが 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 型のデリミタ。

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

    • a:必須。このパラメーターは配列を指定します。配列内の要素は STRING 型です。

  • 戻り値

    STRING 型または STRUCT 型の値が返されます。戻り値は、次のルールに基づいて変化します。

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

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

    • 例 1:コロン (:) を使用して、文字列 namehanmeimei を連結します。サンプルステートメント:

      -- 戻り値は name:hanmeimei です。
      select concat_ws(':','name','hanmeimei');

      -

    • 例 2:入力パラメーターが 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>)  // 文字列をデコードします
  • 説明

    charset で指定された形式に基づいて文字列 str をデコードします。

  • パラメーター

    パラメーター

    必須

    説明

    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:UTF-8 形式に基づいて文字列 English Sample をエンコードおよびデコードします。サンプルステートメント:

      -- 文字列をエンコードおよびデコードします。
      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。

  • 戻り値

    BINARY 型の値が返されます。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>])
  • 説明

    str2 内の部分文字列 str1 の位置を返します。文字列 str2 の部分文字列は、delimiter で区切られています。最初の位置は 1 です。

  • パラメーター

    パラメーター

    必須

    説明

    str1

    はい

    STRING 型の値。このパラメーターは、検索する部分文字列を指定します。

    str2

    はい

    STRING 型の値。このパラメーターは、部分文字列が delimiter で区切られている文字列を指定します。

    delimiter

    いいえ

    STRING 型の値。デフォルトの delimiter はカンマ (,) です。delimiter には、1 文字または文字列を指定できます。

  • 戻り値

    BIGINT 型の値が返されます。戻り値は、次のルールに基づいて変化します。

    • str2str1 が含まれていないか、str1delimiter が含まれている場合は、0 が返されます。

    • str1 または str2 の値が NULL の場合は、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:アンダースコア (_) で区切られた ababc_hello_ab_c 内の部分文字列 の位置を返します。サンプルステートメント:

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

      次の結果が返されます。

      +------------+
      | pos        |
      +------------+
      | 3          |
      +------------+
    • 例 4:入力パラメーターが null に設定されています。サンプルステートメント:

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

      次の結果が返されます。

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

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:指定された数値に基づいて、指定された形式で値を返します。サンプルステートメント:

      -- 戻り値は 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(バイナリ <source>, 文字列 <source_charset>, [文字列 <mode>])
  • 説明

    UTF-8 以外のエンコードのバイナリデータを UTF-8 エンコードの文字列に変換して、後続の計算に使用します。

  • パラメーター

    • source:必須。BINARY 型の値。このパラメーターは、変換するバイナリデータを指定します。

    • source_charset:必須。STRING 型の値。このパラメーターは、source で指定されたバイナリデータの元のエンコード形式を指定します。有効な値:UTF-8UTF-16UTF-16LEUTF-16BEISO-8859-1US-ASCIIGB2312GBKGB18030

    • 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 と出力形式 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>)
  • 説明

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

    • path: 必須。STRING 型の値。このパラメーターは、json パラメーターの値の path を指定し、$ で始まります。path パラメーターの詳細については、「LanguageManual UDF」をご参照ください。ベストプラクティスの詳細については、「JSON 形式のデータを OSS から MaxCompute に移行する」をご参照ください。さまざまな文字の意味:

      • $: ルートノードを示します。

      • . または ['']: 子ノードを示します。MaxCompute は、. または [''] を使用して JSON オブジェクトを解析します。JSON オブジェクトのキーにピリオド(.)が含まれている場合は、[''] を使用できます。

      • [] ([number]): 0 から始まる配列の添え字を示します。

      • *: [] のワイルドカードを示します。この文字が path パラメーターで使用されている場合、配列全体が返されます。アスタリスク(*)はエスケープできません。

  • 制限

    path パラメーターで [''] を使用してデータを抽出できるのは、MaxCompute V2.0 のみです。[''] を使用するには、実行する文の前に 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 文字列であり、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"]

      アプリケーションを送信するか、DingTalk グループ ID 11782920 を検索して MaxCompute 開発者コミュニティ DingTalk グループに参加し、MaxCompute テクニカルサポートエンジニアに GET_JSON_OBJECT 関数を構成して元の文字列を保持するように依頼できます。こうすることで、セッションに対して 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 です。

    • nth_appearance: オプション。0 より大きい BIGINT 型の値。このパラメーターは、文字列 str1 内に n 回目に現れる部分文字列 str2 の位置を指定します。nth_appearance の値が他のデータ型の場合、または 0 以下の場合、エラーが返されます。

  • 戻り値

    BIGINT 型の値が返されます。戻り値は、次のルールに基づいて異なります。

    • str1 内に str2 が見つからない場合は、値 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>)
  • 説明

    入力文字列 strfrom_encoding で指定された文字セットから to_encoding で指定された文字セットに変換できるかどうかを判断します。この関数は、入力文字列が文字化けしているかどうかの判断にも使用できます。ほとんどの場合、from_encoding は UTF-8 に設定され、to_encoding は GBK に設定されます。

  • パラメータ

    • str: 必須。STRING 型の値。空の文字列は任意の文字セットに属することができます。

    • from_encoding および to_encoding: 必須。STRING 型の値。 from_encoding はソース文字セットを指定し、to_encoding は変換先の文字セットを指定します。

  • 戻り値

    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 型の値。このパラメーターは、分割する文字列を指定します。

    • split1 および split2: オプション。STRING 型の値。これらのパラメーターは、ソース文字列を分割するためにデリミタとして使用される文字列を指定します。2 つのパラメーターを指定しない場合、split1 のデフォルト値はセミコロン(;)で、split2 のデフォルト値はコロン(:)です。split1 でソース文字列を分割した後に取得されたキーと値のペアに、split2 で指定されたデリミタが複数含まれている場合、返される結果は未定義です。

    • key: 必須。STRING 型の値。ソース文字列を split1split2 で順番に分割した後、key に対応する値が返されます。

  • 戻り値

    STRING 型の値が返されます。戻り値は、次のルールに基づいて異なります。

    • split1 または split2 の値が null の場合、null が返されます。

    • str または key の値が null の場合、または一致する key がない場合、null が返されます。

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

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

      -- 戻り値は 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 に対応する値を返します。サンプルステートメント:

      -- 戻り値は 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 でキーと値のペアを区切り、キー の値を返します。

  • パラメーター

    • str: 必須。STRING 型の値。分割する文字列を指定します。

    • split1 および split2: 必須。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 型の値が返されます。戻り値は、次のルールによって異なります。

    • str 内に substr が見つからない場合は、0 が返されます。

    • str または substr の値が null の場合は、null が返されます。

    • start_pos の値が null の場合は、0 が返されます。

    • 例 1: 文字列 abchelloabc 内の文字列 ab の位置を返します。サンプルステートメント:

      -- 戻り値は 1 です。
      select locate('ab', 'abchelloabc');
    • 例 2: 文字列 abchelloabc 内の文字列 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 型の値が返されます。戻り値は、次のルールに基づいて異なります。

    • length の値が str1 の文字数より小さい場合、この関数は str1 を左側から切り捨て、length で指定された文字数の文字列を取得します。

    • length が 0 に設定されている場合、空の文字列が返されます。

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

    • 例 1: 文字列 abcdefgh の左側に文字列 12 を使用して、文字数が 10 の文字列を取得します。サンプル文:

      -- 戻り値は 12abcdefgh です。
      select lpad('abcdefgh', 10, '12');
    • 例 2: 文字列 abcdefgh の左側に文字列 12 を使用して、文字数が 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>)
  • 説明

    次の点に注意してください。

    • 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 の左側のスペースを削除します。サンプルステートメント:

      -- 戻り値は yxTxyomxx です。
      select ltrim(' yxTxyomxx ');
      -- 上記のステートメントは、次のステートメントと同じです。
      select trim(leading from ' yxTxyomxx ');
    • 例 2: xy コレクション内の 1 つ以上の文字で構成される部分文字列を、文字列 yxTxyomxx の左側から削除します。

      -- 戻り値は 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 データ型がサポートされています。

  • 戻り値

    文字列式を使用して計算されたハッシュ値が返されます。ハッシュ値の長さは 64 バイトです。Hive 互換データ型エディションでは、文字列以外の式が使用された場合、null 値が返されます。

  • -- 文字列 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

  • 構文

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

    url を解析し、key1key2 などの入力キーのグループで指定された文字列を抽出します。PARSE_URL_TUPLE 関数は、PARSE_URL 関数に似ています。ただし、PARSE_URL_TUPLE 関数は、複数のキーに対応する文字列を同時に抽出できるため、パフォーマンスが向上します。

  • パラメーター

    • url: 必須。STRING 型の値。このパラメーターは URL を指定します。URL が無効な場合、エラーが返されます。

    • key1 および key2: 必須。STRING 型の値。これらのパラメーターは、抽出する文字列に対応するキーを指定します。有効な値:

      • HOST: ドメイン名または IP アドレスであるホストアドレスを示します。

      • PATH: サーバー内のネットワークリソースのパスを示します。

      • QUERY: クエリする文字列を示します。

      • REF: 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 です。この値は、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 仕様に準拠します。

  • 説明

    source 文字列を、指定された pattern に基づいてグループに分割し、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 に一致するすべての部分文字列が返されます。

    • 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 以上である必要があります。このパラメーターを指定しない場合、ID が ID1 のグループがパターン照合に使用されます。このパラメーターを 0 に設定すると、すべてのグループが pattern の照合に使用されます。

  • 戻り値

    ARRAY 型の値が返されます。group_id を指定した場合、group_id で指定されたグループのすべての一致結果で構成される配列が返されます。group_id を指定しない場合、ID1 のグループのすべての一致結果で構成される配列が返されます。

    • group_id を指定しない場合、ID が 1 のグループのすべての一致結果で構成される配列が返されます。サンプルステートメント:ID

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

      次の結果が返されます。

      +------------+
      | _c0        |
      +------------+
      | [100,300] |
      +------------+
    • group_id2 に設定すると、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>]]])
  • 説明

    source 文字列内で、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 型の値が返されます。戻り値は、source 文字列内の一致する部分文字列の return_option で指定された開始位置または終了位置です。戻り値は、次のルールに基づいて異なります。

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

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

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

    • 例 1: i love www.taobao.com 文字列の 3 番目の文字から、2 番目に o[[:alpha:]]{1} に一致する部分文字列の開始位置を返します。サンプルステートメント:

      -- 戻り値は 14 です。
      select regexp_instr('i love www.taobao.com', 'o[[:alpha:]]{1}', 3, 2);
    • 例 2: i love www.taobao.com 文字列の 3 番目の文字から、2 番目に o[[:alpha:]]{1} に一致する部分文字列の終了位置を返します。サンプルステートメント:

      -- 戻り値は 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 型の値。このパラメーターは、置き換えたい 3 つの文字列を指定します。

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

    • 置換文字列: 必須。STRING 型の値。 パターン に一致する文字列を置換するために使用されます。

      説明
      • replace_string が空の文字列の場合、pattern で指定された値と一致する文字列を削除した後の値が返されます。

      • replace_string の値には、後方参照 \n を含めることができます。replace_string の値に後方参照が含まれている場合、pattern で指定された n 番目のキャプチャグループと一致する部分文字列が挿入されます。 n は 1 から 9 までの数字です。replace_string の値に後方参照 \0 が含まれている場合、パターンpattern 全体に一致する部分文字列が挿入されます。バックスラッシュ(\)はエスケープする必要があります。たとえば、 の値に後方参照 \1 が含まれている場合、後方参照のバックスラッシュ(\)をエスケープする必要があり、後方参照 \1 は (\\1) として表現されます。未加工文字列 R'(\1)' を使用して後方参照 \1 を表現することもできます。

    • occurrence: オプション。BIGINT 型の定数。0 以上である必要があります。このパラメーターの値は、occurrence で指定された n 番目の出現箇所で指定されたパターンに一致する文字列が 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: (\\1)\\2-\\3 を使用して、123.456.7890 文字列内の ([[:digit:]]{3})\\.([[:digit:]]{3})\\.([[:digit:]]{4}) に一致するすべての部分文字列を置き換えます。サンプルステートメント:

      -- 戻り値は (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 テーブルの URL 列のデータは www.simple@xxx.com 形式で、各行の www.simple@xxx.com の xxx は異なります。www の後のすべての文字を、URL 列のデータの文字列に置き換えます。サンプルステートメント:

      -- 戻り値は wwwtest です。
      select regexp_replace(url,'(www)(.*)','wwwtest',0) from url_set;
    • 例 5: 入力パラメーターが null に設定されています。サンプルステートメント:

      -- 戻り値は null です。
      select regexp_replace('abcd', '(.)', null, 0);
    • 例 6: 参照したいグループが存在しません。サンプルステートメント:

      -- パターンには 1 つのグループのみが定義されており、参照されるグループは存在しません。
      -- この関数をこのように使用しないことをお勧めします。存在しないグループを参照した結果は定義されていません。
      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>]])
  • 説明

    start_position で指定された開始位置から、source 文字列内の occurrence で指定された n 番目の出現箇所で、指定された pattern に一致する文字列を返します。

  • パラメーター

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

    • pattern: 必須。STRING 型の定数または正規表現。このパラメーターは、指定された部分文字列が一致する必要があるパターンを指定します。正規表現の詳細については、「RLIKE」をご参照ください。

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

    • occurrence: オプション。BIGINT 型の定数。このパラメーターの値は 0 より大きい必要があります。このパラメーターを指定しない場合、デフォルト値は 1 です。この値は、最初に一致した部分文字列が返されることを示します。

  • 戻り値

    STRING 型の値が返されます。戻り値は、次のルールに基づいて異なります。

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

    • 指定されたパターンに一致する部分文字列がない場合、null が返されます。

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

    • sourcepattern、または start_positionoccurrence の値が 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>)
  • 説明

    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: 文字列 abc5 回繰り返す文字列を返します。サンプルステートメント:

      -- 戻り値は abcabcabcabcabc です。
      select repeat('abc', 5); 
    • 例 2: 入力パラメーターが null に設定されています。サンプルステートメント:

      -- 戻り値は 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 に置き換えます。サンプル文:

      -- 戻り値は 12ab です。
      select replace('ababab','abab','12');
    • 例 2: 入力パラメーターが null に設定されています。サンプル文:

      -- 戻り値は null です。
      select replace('123abab456ab',null,'abab');

逆順

  • 構文

    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 の文字を逆順にした文字列を返します。サンプル文:

      -- 戻り値は 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>)
  • 説明

    str1 の右側に str2 を使用して、指定された length まで埋め込みます。この関数は、MaxCompute V2.0 の追加関数です。

  • パラメーター

    • str1: 必須。STRING 型の値。右側に埋め込みを行う文字列を指定します。

    • length: 必須。INT 型の値。値は 0 以上である必要があります。右側に埋め込む文字数を指定します。

    • str2: 必須。別の文字列の右側に埋め込む文字列を指定します。

  • 戻り値

    STRING 型の値が返されます。戻り値は、次のルールに基づいて異なります。

    • length の値が str1 の文字数より小さい場合、この関数は str1 を左側から切り捨て、length で指定された文字数の文字列を取得します。

    • length が 0 に設定されている場合、空の文字列が返されます。

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

    • 例 1: 文字列 abcdefgh の右側に文字列 12 を使用して、文字数が 10 の文字列を取得します。サンプル文:

      -- 戻り値は abcdefgh12 です。
      select rpad('abcdefgh', 10, '12');
    • 例 2: 文字列 abcdefgh の右側に文字列 12 を使用して、文字数が 5 の文字列を取得します。サンプル文:

      -- 戻り値は abcde です。
      select rpad('abcdefgh', 5, '12');
    • 例 3: length の値が 0 です。サンプル文:

      -- 戻り値は空の文字列です。
      select rpad('abcdefgh' ,0, '12'); 
    • 例 4: 入力パラメーターが null に設定されています。サンプル文:

      -- 戻り値は 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 の右側からスペースを削除します。サンプルステートメント:

      -- 戻り値は yxTxyomxx です。
      select rtrim(' yxTxyomxx ');
      -- 上記のステートメントは、次のステートメントと同じです。
      select trim(trailing from ' yxTxyomxx ');
    • 例 2: yxTxyomxx 文字列の右側から、xy コレクションに含まれる 1 つ以上の文字で構成される部分文字列を削除します。

      -- 戻り値は 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 型の値が返されます。次のシナリオでは、値 null が返されます。

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

    • n の値が null の場合、null が返されます。

  • -- 戻り値は 10 です。
    select length(space(10));

SPLIT

  • 構文

    split(<str>, <pat>, [<trimTailEmpty>])
  • パラメーター

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

      • pat: 必須。STRING 型のデリミタ。正規表現がサポートされています。正規表現の詳細については、「RLIKE」をご参照ください。

      • trimTailEmpty: オプション。デフォルト値は true です。このパラメーターを false に設定すると、配列の末尾にある空の文字列が保持されます。このルールは、hive 互換データ型エディションが有効になっている場合に適用されます。

  • 戻り値

    配列が返されます。配列の要素は 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>])
  • 説明

    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 より大きい場合)、空の文字列が返されます。

    • 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: separatorstr で指定された文字列に存在しません。サンプルステートメント:

      -- 戻り値は 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>])
  • 説明

    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 で指定された文字列の末尾までの部分文字列が返されます。

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

    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 で指定された文字列の開始位置から末尾までの部分文字列が返されます。

    • 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 が返されます。

    • 例 2:文字列 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);
    • 例 4:入力パラメーターが null に設定されています。ステートメント例:

      -- 戻り値は 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 型に変換します。サンプルステートメント:

      -- 戻り値は 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');
      -- 戻り値は china fighting です。
      select tolower('China 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');
      -- 戻り値は CHINA FIGHTING です。
      select toupper('China Fighting');
    • 例 2: 入力パラメーターが null に設定されています。サンプル文:

      -- 戻り値は null です。
      select toupper(null);

変換

  • 構文

    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 から置き換えます。サンプルステートメント:

      -- 戻り値は cdcdcd です。
      select translate('ababab','abab','cd');
    • 例 2:文字列 cdefg 内の指定された文字を使用して、ababab に含まれる文字を abab から置き換えます。サンプルステートメント:

      -- 戻り値は 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 で指定された 1 つ以上の文字で構成される部分文字列が、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 コレクション内の 1 つ以上の文字で構成される部分文字列を削除します。

      -- 戻り値は 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 の逆関数です。エンコード形式は、次のルールに準拠する必要があります。

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

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

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

    • %xy 形式のシーケンスはバイト値に変換されます。連続するバイト値は、encoding の値に基づいて関連する文字列にデコードされます。

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

  • パラメーター

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

    • encoding: オプション。このパラメーターはエンコード形式を指定します。GBK または UTF-8 を指定できます。このパラメーターを指定しない場合、デフォルト値は UTF-8 です。

  • 戻り値

    STRING 型の UTF-8 エンコード文字列が返されます。input または encoding の値が null の場合、null が返されます。

  • -- 戻り値は 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 フォーマットで入力文字列をエンコードします。エンコード形式は、次のルールに準拠する必要があります。

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

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

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

    • その他の文字は、指定された encoding フォーマットに基づいてバイト値に変換されます。各バイト値は %xy 形式で表されます。ここで、xy は文字値の 16 進数表現です。

  • パラメーター

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

    • encoding: オプション。このパラメーターはエンコード形式を指定します。GBK または UTF-8 を指定できます。このパラメーターを指定しない場合、デフォルト値は UTF-8 です。

  • 戻り値

    STRING 型の値が返されます。input または encoding の値が null の場合、null が返されます。

  • -- 戻り値は %E7%A4%BA%E4%BE%8Bfor+url_encode%3A%2F%2F+%28fdsf%29 です。
    select url_encode('Example for url_encode:// (fdsf)');
    -- 戻り値は Example+for+url_encode+%3A%2F%2F+dsf%28fasfs%29 です。
    select url_encode('Example for url_encode:// dsf(fasfs)', 'GBK');

参照資料

上記の関数がビジネス要件を満たせない場合は、独自のコードロジックを記述してユーザー定義関数(UDF)を作成し、多様なビジネス要件に対応できます。詳細については、「概要」をご参照ください。