メインコンテンツまでスキップ

transform_values

transform_values

概要

マップ内の値をラムダ式を使用して変換し、マップ内の各エントリごとに新しい値を生成します。

この関数はv3.1以降でサポートされています。

構文

MAP transform_values(lambda_func, any_map)

lambda_funcany_mapの後に配置することもできます:

MAP transform_values(any_map, lambda_func)

パラメータ

  • any_map:マップです。
  • lambda_funcany_mapに適用するラムダ式です。

戻り値

値のデータ型はラムダ式の結果とany_mapのキーのデータ型が同じであるマップ値が返されます。

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

元のマップのキーまたは値がNULLの場合、NULLは通常の値として処理されます。

ラムダ式は2つのパラメータを持つ必要があります。最初のパラメータはキーを表し、2番目のパラメータは値を表します。

次の例では、map_from_arraysを使用してマップ値{1:"ab",3:"cdd",2:null,null:"abc"}を生成します。その後、ラムダ式をマップの各値に適用します。最初の例では、各キーと値ペアの値を1に変更します。2番目の例では、各キーと値ペアの値をnullに変更します。

mysql> select transform_values((k,v)->1, col_map) from (select map_from_arrays([1,3,null,2,null],['ab','cdd',null,null,'abc']) as col_map)A;
+----------------------------------------+
| transform_values((k, v) -> 1, col_map) |
+----------------------------------------+
| {1:1,3:1,2:1,null:1} |
+----------------------------------------+
1 row in set (0.02 sec)

mysql> select transform_values((k,v)->null, col_map) from (select map_from_arrays([1,3,null,2,null],['ab','cdd',null,null,'abc']) as col_map)A;
+--------------------------------------------+
| transform_values((k, v) -> NULL, col_map) |
+--------------------------------------------+
| {1:null,3:null,2:null,null:null} |
+--------------------------------------------+
1 row in set (0.01 sec)