キャスト関数と演算子

キャスト関数と演算子を使用すると、あるデータ型から別のデータ型に値を変換できます。TiDB は、MySQL 8.0 で利用可能なキャスト関数と演算子をすべてサポートします。

名前説明
BINARY文字列をバイナリ文字列に変換する
CAST()値を特定の型にキャストする
CONVERT()値を特定の型にキャストする

注記:

TiDB と MySQL は、 SELECT CAST(MeN AS CHAR) (または同等の形式SELECT CONVERT(MeM, CHAR) ) に対して一貫性のない結果を表示します。ここで、 MeN科学的記数法の倍精度浮動小数点数を表します。MySQL は、 -15 <= N <= 14場合は完全な数値を表示し、 N < -15またはN > 14場合は科学的記数法を表示します。ただし、TiDB は常に完全な数値を表示します。たとえば、MySQL はSELECT CAST(3.1415e15 AS CHAR)の結果を3.1415e15として表示しますが、TiDB は結果を3141500000000000として表示します。

バイナリ

BINARY演算子は MySQL 8.0.27 以降では非推奨になりました。TiDB と MySQL の両方で、代わりにCAST(... AS BINARY)を使用することをお勧めします。

キャスト

CAST(&#x3C;expression> AS &#x3C;type> [ARRAY])関数は、式を特定の型にキャストするために使用されます。

この関数は多値インデックスを作成する場合にも使用されます。

次のタイプがサポートされています:

タイプ説明多値インデックスで使用できるかどうか
BINARY(n)バイナリ文字列いいえ
CHAR(n)文字列はい、ただし長さが指定されている場合のみです
DATE日付はい
DATETIME(fsp)日付/時刻( fspはオプション)はい
DECIMAL(n, m)10 進数。1 とmオプションで、指定しない場合は100になりますnいいえ
DOUBLE倍精度浮動小数点数いいえ
FLOAT(n)浮動小数点数。1 nオプションで、 0から53までの範囲で指定します。いいえ
JSON翻訳いいえ
REAL浮動小数点数はい
SIGNED [INTEGER]符号付き整数はい
TIME(fsp)時間はい
UNSIGNED [INTEGER]符号なし整数はい
YEARいいえ

例:

次のステートメントは、バイナリ文字列を HEX リテラルからCHARに変換します。

SELECT CAST(0x54694442 AS CHAR);
+--------------------------+ | CAST(0x54694442 AS CHAR) | +--------------------------+ | TiDB | +--------------------------+ 1 row in set (0.0002 sec)

次のステートメントは、JSON 列から抽出されたaの属性の値を符号なし配列にキャストします。配列へのキャストは、複数値インデックスのインデックス定義の一部としてのみサポートされていることに注意してください。

CREATE TABLE t ( id INT PRIMARY KEY, j JSON, INDEX idx_a ((CAST(j->'$.a' AS UNSIGNED ARRAY))) ); INSERT INTO t VALUES (1, JSON_OBJECT('a',JSON_ARRAY(1,2,3))); INSERT INTO t VALUES (2, JSON_OBJECT('a',JSON_ARRAY(4,5,6))); INSERT INTO t VALUES (3, JSON_OBJECT('a',JSON_ARRAY(7,8,9))); ANALYZE TABLE t;
EXPLAIN SELECT * FROM t WHERE 1 MEMBER OF(j->'$.a')\G *************************** 1. row *************************** id: IndexMerge_10 estRows: 2.00 task: root access object: operator info: type: union *************************** 2. row *************************** id: ├─IndexRangeScan_8(Build) estRows: 2.00 task: cop[tikv] access object: table:t, index:idx_a(cast(json_extract(`j`, _utf8mb4'$.a') as unsigned array)) operator info: range:[1,1], keep order:false, stats:partial[j:unInitialized] *************************** 3. row *************************** id: └─TableRowIDScan_9(Probe) estRows: 2.00 task: cop[tikv] access object: table:t operator info: keep order:false, stats:partial[j:unInitialized] 3 rows in set (0.00 sec)

変換する

CONVERT()関数は文字セット間の変換に使用されます。

例:

SELECT CONVERT(0x616263 USING utf8mb4);
+---------------------------------+ | CONVERT(0x616263 USING utf8mb4) | +---------------------------------+ | abc | +---------------------------------+ 1 row in set (0.0004 sec)

MySQL 互換性

  • TiDB はSPATIAL型に対するキャスト操作をサポートしていません。詳細については、 #6347を参照してください。
  • TiDB はCAST()に対してAT TIME ZONEサポートしていません。詳細については、 #51742を参照してください。
  • CAST(24 AS YEAR) TiDB では 2 桁、MySQL では 4 桁を返します。詳細については、 #29629参照してください。

このページは役に立ちましたか?