📣

TiDB Cloud Serverless が
Starter
に変わりました!このページは自動翻訳されたものです。
原文はこちらからご覧ください。

キャスト関数と演算子

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

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

注記:

TiDBとMySQLは、 SELECT CAST(MeN AS CHAR) (またはそれに相当するSELECT CONVERT(MeM, CHAR) )の結果に一貫性がありません。5 MeN倍精度浮動小数点数(科学的記数法)を表します。MySQLは-15 <= N <= 14場合は完全な数値を表示し、 N < -15またはN > 14場合は科学的記数法を表示します。しかし、TiDBは常に完全な数値を表示します。例えば、MySQLではSELECT CAST(3.1415e15 AS CHAR)の結果を3.1415e15と表示しますが、TiDBでは3141500000000000と表示します。

バイナリ

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

キャスト

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

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

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

タイプ説明多値インデックスで使用できるかどうか
BINARY(n)バイナリ文字列いいえ
CHAR(n)文字列はい、ただし長さが指定されている場合のみ
DATE日付はい
DATETIME(fsp)日付/時刻( fspはオプション)はい
DECIMAL(n, m)n進数。1 とmオプションで、指定しない場合は100になります。いいえ
DOUBLE倍精度浮動小数点数いいえ
FLOAT(n)浮動小数点数nオプションで、 0から53の範囲で指定します。いいえ
JSONJSONいいえ
REAL浮動小数点数はい
SIGNED [INTEGER]符号付き整数はい
TIME(fsp)時間はい
UNSIGNED [INTEGER]符号なし整数はい
VECTORベクターいいえ
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はAT TIME ZONE for CAST()をサポートしていません。詳細については#51742参照してください。
  • CAST(24 AS YEAR) TiDBでは2桁、MySQLでは4桁を返します。詳細については、 #29629参照してください。

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