MariaDBでは、CAST()
値を別のデータ型に変換する組み込み関数です。 1つのタイプの値を取り、指定されたタイプの値を返します。
関数を呼び出すときに引数として値と、変換する型を指定します。
CAST()
CONVERT()
と同様に機能します 。
構文
構文は次のようになります:
CAST(expr AS type)
expr
変換する値であり、type
変換するデータ型です。
例
簡単な例を次に示します。
SELECT CAST(123.45 AS INT);
結果:
+---------------------+ | CAST(123.45 AS INT) | +---------------------+ | 123 | +---------------------+
これにより値が整数にキャストされたため、小数点以下の桁数が削除されました。
別の例を次に示します。
SELECT CAST('2020-01-01' AS DATETIME);
結果:
+--------------------------------+ | CAST('2020-01-01' AS DATETIME) | +--------------------------------+ | 2020-01-01 00:00:00 | +--------------------------------+
この場合、文字列をDATETIME
に変換しました データ型。
変換の失敗
前の例では、有効なDATE
を指定しました 文字列(またはDATE
リテラル)。したがって、MariaDBは値をDATETIME
に変換することができました データ型。
ただし、無効なDATE
を指定するとどうなりますか。 文字列:
SELECT CAST('1 Jan, 2020' AS DATE);
結果:
+-----------------------------+ | CAST('1 Jan, 2020' AS DATE) | +-----------------------------+ | NULL | +-----------------------------+
ここで、MariaDBはこの値を変換する方法を理解できず、NULL
を返したようです。 。
この場合、STR_TO_DATE()
などの別の関数を使用できます。 このような変換を実行するには:
SELECT STR_TO_DATE('1 Jan, 2020', '%e %M, %Y');
結果:
+-----------------------------------------+ | STR_TO_DATE('1 Jan, 2020', '%e %M, %Y') | +-----------------------------------------+ | 2020-01-01 | +-----------------------------------------+
文字セットを指定する
CAST()
を使用する場合、戻り値に使用する文字セットを指定できます。 働き。
例:
SELECT
COLLATION(123) AS "123",
COLLATION(CAST(123 AS CHAR CHARACTER SET utf16)) AS "utf16",
COLLATION(CAST(123 AS CHAR CHARACTER SET latin1)) AS "latin1",
COLLATION(CAST(123 AS CHAR CHARACTER SET big5)) AS "big5";
結果:
+--------+------------------+-------------------+-----------------+ | 123 | utf16 | latin1 | big5 | +--------+------------------+-------------------+-----------------+ | binary | utf16_general_ci | latin1_swedish_ci | big5_chinese_ci | +--------+------------------+-------------------+-----------------+
ここでは、COLLATION()
を使用しました 新しいデータ型にキャストされた後、各値の照合を返す関数。各値は、指定された文字セットのデフォルトの照合を使用します。
初期値は文字列ではないため、COLLATION()
バイナリを返します。
CHAR
への変換 文字セットを指定しないと、collation_connection
になります 使用されている文字セットの照合。
照合を指定する
照合を指定することもできます。
例:
SELECT
COLLATION(123) AS "123",
COLLATION(CAST(123 AS CHAR CHARACTER SET utf16) COLLATE utf16_icelandic_ci) AS "utf16",
COLLATION(CAST(123 AS CHAR CHARACTER SET latin1) COLLATE latin1_german2_ci) AS "latin1",
COLLATION(CAST(123 AS CHAR CHARACTER SET big5) COLLATE big5_chinese_nopad_ci) AS "big5";
結果:
+--------+--------------------+-------------------+-----------------------+ | 123 | utf16 | latin1 | big5 | +--------+--------------------+-------------------+-----------------------+ | binary | utf16_icelandic_ci | latin1_german2_ci | big5_chinese_nopad_ci | +--------+--------------------+-------------------+-----------------------+
この場合、指定した文字セットのデフォルトの照合ではない使用する照合を明示的に指定しました(ただし、文字セットの有効な照合は引き続き有効です)。
文字セットに対して無効な照合を指定すると、エラーが発生します。
最初の2つの照合を切り替えると、次のようになります。
SELECT
COLLATION(123) AS "123",
COLLATION(CAST(123 AS CHAR CHARACTER SET utf16) COLLATE latin1_german2_ci) AS "utf16",
COLLATION(CAST(123 AS CHAR CHARACTER SET latin1) COLLATE utf16_icelandic_ci) AS "latin1",
COLLATION(CAST(123 AS CHAR CHARACTER SET big5) COLLATE big5_chinese_nopad_ci) AS "big5";
結果:
ERROR 1253 (42000): COLLATION 'latin1_german2_ci' is not valid for CHARACTER SET 'utf16'
latin1_german2_ci
が原因で、最初のものに到達してエラーがスローされました。 utf16
の有効な照合ではありません 文字セット。
照合とそれに対応する文字セットの完全なリストについては、MariaDBで利用可能な照合のリストを参照してください。
ヌル引数
null
を変換しようとしています null
を返します :
SELECT CAST(null AS DATETIME);
結果:
+------------------------+ | CAST(null AS DATETIME) | +------------------------+ | NULL | +------------------------+
ただし、null
を渡す 新しいデータ型を指定しないと、エラーが発生します:
SELECT CAST(null);
結果:
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near ')' at line 1
引数がありません
CAST()
を呼び出す 引数を渡さないとエラーが発生します:
SELECT CAST();
結果:
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near ')' at line 1