CONV は、ある基数から別の基数に数値を変換し、結果を STRING として返します。
構文
STRING CONV(<input>, BIGINT <from_base>, BIGINT <to_base>)パラメータ
| パラメータ | 必須 | 説明 |
|---|---|---|
input | Yes | 変換する数値。STRING 型である必要があります。Hive 互換モード (set odps.sql.hive.compatible=true;) では、BIGINT および DOUBLE からの暗黙的な型変換がサポートされています。非 Hive 互換モード (set odps.sql.hive.compatible=false;) では、BIGINT および DOUBLE の入力はサポートされておらず、null が返されます。 |
from_base | Yes | input 値の基数。有効な値は 2、8、10、および 16 です。その他の値は受け入れられません。暗黙的な型変換はサポートされていません。 |
to_base | Yes | 出力値の基数。有効な値は 2、8、10、および 16 です。その他の値は受け入れられません。暗黙的な型変換はサポートされていません。 |
戻り値
STRING 型の値を返します。次の表に、各条件での戻り値を示します。
| 条件 | 非 Hive 互換モード | Hive 互換モード |
|---|---|---|
input、from_base、または to_base が null の場合 | null | null |
| 64 ビットオーバーフロー (input が 64 ビットの範囲を超える場合) | null | null |
input が BIGINT または DOUBLE 型の場合 | null (暗黙的な型変換はサポートされていません) | STRING に暗黙的に変換され、その後変換が実行されます |
input が負の値の場合 | null | 0 |
input が小数値の場合 | null | 小数部を切り捨て、整数部を変換します |
変換は 64 ビット精度で実行されます。オーバーフローが発生した場合、null が返されます。
サンプルデータ
次の例では、mf_math_fun_t テーブルを使用します。次のステートメントを使用してテーブルを作成し、サンプルデータを挿入します。
CREATE TABLE IF NOT EXISTS mf_math_fun_t(
int_data INT,
bigint_data BIGINT,
double_data DOUBLE,
decimal_data DECIMAL,
float_data FLOAT,
string_data STRING
);
INSERT INTO mf_math_fun_t VALUES
(null, -10, 0.525, 0.525BD, CAST(0.525 AS FLOAT), '10'),
(-20, null, -0.1, -0.1BD, CAST(-0.1 AS FLOAT), '-10'),
(0, -1, null, 20.45BD, CAST(-1 AS FLOAT), '30'),
(-40, 4, 0.89, null, CAST(0.89 AS FLOAT), '-30'),
(5, -50, -1, -1BD, null, '50'),
(-60, 6, 1.5, 1.5BD, CAST(1.5 AS FLOAT), '-50'),
(-1, -70, -7.5, -7.5BD, CAST(-7.5 AS FLOAT),null ),
(-80, 1, -10.2, -10.2BD, CAST(-10.2 AS FLOAT), '-1' ),
(9, -90, 2.58, 2.58BD, CAST(2.58 AS FLOAT), '0'),
(-100, 10, -5.8, -5.8BD, CAST(-5.8 AS FLOAT), '-90');テーブルを表示するには、次を実行します。
SELECT * FROM mf_math_fun_t;
-- 結果:
+------------+-------------+-------------+--------------+------------+-------------+
| int_data | bigint_data | double_data | decimal_data | float_data | string_data |
+------------+-------------+-------------+--------------+------------+-------------+
| NULL | -10 | 0.525 | 0.525 | 0.525 | 10 |
| -20 | NULL | -0.1 | -0.1 | -0.1 | -10 |
| 0 | -1 | NULL | 20.45 | -1.0 | 30 |
| -40 | 4 | 0.89 | NULL | 0.89 | -30 |
| 5 | -50 | -1.0 | -1 | NULL | 50 |
| -60 | 6 | 1.5 | 1.5 | 1.5 | -50 |
| -1 | -70 | -7.5 | -7.5 | -7.5 | NULL |
| -80 | 1 | -10.2 | -10.2 | -10.2 | -1 |
| 9 | -90 | 2.58 | 2.58 | 2.58 | 0 |
| -100 | 10 | -5.8 | -5.8 | -5.8 | -90 |
+------------+-------------+-------------+--------------+------------+-------------+例
静的値
-- 12 を返します
SELECT CONV('1100', 2, 10);
-- C を返します
SELECT CONV('1100', 2, 16);
-- 171 を返します
SELECT CONV('ab', 16, 10);
-- AB を返します
SELECT CONV('ab', 16, 16);
-- NULL を返します (from_base が null の場合)
SELECT CONV('1100', null, 10);テーブルデータ
bigint_data、double_data、decimal_data、および string_data 列をバイナリに変換します。
SELECT CONV(bigint_data,10,2) AS bigint_new, CONV(double_data,10,2) AS double_new, CONV(decimal_data,10,2) AS decimal_new, CONV(string_data,10,2) AS string_new FROM mf_math_fun_t;結果:
+------------+------------+-------------+------------+
| bigint_new | double_new | decimal_new | string_new |
+------------+------------+-------------+------------+
| NULL | 0 | 0 | 1010 |
| NULL | NULL | NULL | NULL |
| NULL | NULL | 10100 | 11110 |
| 100 | 0 | NULL | NULL |
| NULL | NULL | NULL | 110010 |
| 110 | 1 | 1 | NULL |
| NULL | NULL | NULL | NULL |
| 1 | NULL | NULL | NULL |
| NULL | 10 | 10 | 0 |
| 1010 | NULL | NULL | NULL |
+------------+------------+-------------+------------+関連関数
CONV は数学関数です。データ計算と変換に関連する関数については、「数学関数」をご参照ください。