キャスト(CAST)とは?
キャストとは、変数などのデータ型を変換することを言います。
例えば、「INT型をDATE型にする」といったイメージです。
MySQLのさまざまな型でCASTしてみる
ここでは実際に、さまざまな型でCASTしていきましょう。
CASTする際は、次のように記述します。
SELECT CAST(expr AS type)
exprが変換したい値、typeが変換したいデータ型です。
CAST関数でtypeに設定きるデータ型は、次のいずれかになります。
- BINARY[(N)]
- CHAR[(N)]
- DATE
- DATETIME
- DECIMAL[(M[,D])]
- SIGNED [INTEGER]
- TIME
- UNSIGNED [INTEGER]
1.INT型(SIGNED/UNSIGNED)でCAST
まずは、現在の日付と時間を返す「now()」を「SIGNED」型にCASTしてみましょう。
mysql> SELECT CAST(now() AS SIGNED); +-----------------------+ | cast(now() as signed) | +-----------------------+ | 20200126160518 | +-----------------------+ 1 row in set (0.00 sec)
上記のように、現在の時間が整数の並びに変換されているのがわかります。
2.DATE型でCAST
次に、数値を「DATE」型にCASTしてみましょう。
mysql> SELECT CAST(20200101 AS DATE); +------------------------+ | CAST(20200101 AS DATE) | +------------------------+ | 2020-01-01 | +------------------------+ 1 row in set (0.00 sec)
「20200101」という数値が「2020-01-01」とDATE型に変換されています。
3.DATETIME型でCAST
数値を「DATETIME」型にCASTしてみましょう。
基本的な動きはDATE型と同じになります。
mysql> SELECT CAST(20200101030330 AS DATETIME); +----------------------------------+ | CAST(20200101030330 AS DATETIME) | +----------------------------------+ | 2020-01-01 03:03:30 | +----------------------------------+ 1 row in set (0.00 sec)
時間部分を指定しない場合、「00:00:00」になるのがわかります。
mysql> SELECT CAST(20200101 AS DATETIME); +----------------------------+ | CAST(20200101 AS DATETIME) | +----------------------------+ | 2020-01-01 00:00:00 | +----------------------------+ 1 row in set (0.00 sec)
4.VARCHAR型(CHAR/NCHAR)でCAST
数値を「CHAR」型にCASTしてみましょう。
先ほどDATETIME型で確認したものと同じ数値をCHAR型に変換してみます。
mysql> SELECT CAST(20200101030330 AS CHAR); +------------------------------+ | CAST(20200101030330 AS CHAR) | +------------------------------+ | 20200101030330 | +------------------------------+ 1 row in set (0.00 sec)
DATETIME型とは異なり、CHAR型にCASTできているのがわかりますね。
5.DECIMAL型でCAST
引数なしのDECIMAL型でCASTすると、少数部分は表示されず整数で表示されます。
mysql> SELECT CAST(2020.0101 AS DECIMAL); +----------------------------+ | CAST(2020.0101 AS DECIMAL) | +----------------------------+ | 2020 | +----------------------------+ 1 row in set (0.01 sec)
6.FLOATはDECIMAL型で代用してCAST
MySQLのCASTでは、FLOATの指定はできません。
そのため、FLOATの代わりにDECIMAL型を用いることで少数でのCASTを実現します。
DECIMALは次のように記述しましょう。
SELECT CAST(数値 AS DECIMAL(全体の桁数, 小数点以下の桁数));
引数の1つ目が「全体の桁数」、2つ目が「小数点以下の桁数」です。
SELECT CAST(2020 AS DECIMAL(10,2)); +-----------------------------+ | CAST(2020 AS DECIMAL(10,2)) | +-----------------------------+ | 2020.00 | +-----------------------------+ 1 row in set (0.00 sec) mysql> SELECT CAST(2020 AS DECIMAL(5,3)); +----------------------------+ | CAST(2020 AS DECIMAL(5,3)) | +----------------------------+ | 99.999 | +----------------------------+ 1 row in set, 1 warning (0.00 sec)
2020をDECIMAL(10,2)にすると「2020.00」に、DECIMAL(5,3)にすると「99.999」になります。
まとめ
MySQLのCAST関数の使い方についてまとめました。
- CASTとは、変数などのデータ型を変換することを指す
- CASTできるデータ型は決まっている
- FLOAT型は使えないため、DECIMAL型で代用する
CASTの使い方を知りたくなったら、ぜひこの記事を参考に使いこなしてください。