バナー画像

キャスト(CAST)とは?

キャストとは、変数などのデータ型を変換することを言います。

例えば、「INT型をDATE型にする」といったイメージです。

MySQLのさまざまな型でCASTしてみる

ここでは実際に、さまざまな型でCASTしていきましょう。

CASTする際は、次のように記述します。

SELECT CAST(expr AS type)

exprが変換したい値、typeが変換したいデータ型です。

CAST関数で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の使い方を知りたくなったら、ぜひこの記事を参考に使いこなしてください。

エンジニアになりたい人に選ばれるプログラミングスクール「ポテパンキャンプ 」

ポテパンキャンプは卒業生の多くがWebエンジニアとして活躍している実践型プログラミングスクールです。 1000名以上が受講しており、その多くが上場企業、ベンチャー企業のWebエンジニアとして活躍しています。

基礎的な学習だけで満足せず、実際にプログラミングを覚えて実践で使えるレベルまで学習したいという方に人気です。 プログラミングを学習し実践で使うには様々な要素が必要です。

それがマルっと詰まっているポテパンキャンプでプログラミングを学習してみませんか?

卒業生の多くがWebエンジニアとして活躍

卒業生の多くがWeb企業で活躍しております。
実践的なカリキュラムをこなしているからこそ現場でも戦力となっております。
活躍する卒業生のインタビューもございますので是非御覧ください。

経験豊富なエンジニア陣が直接指導

実践的なカリキュラムと経験豊富なエンジニアが直接指導にあたります。
有名企業のエンジニアも多数在籍し品質高いWebアプリケーションを作れるようサポートします。

満足度高くコスパの高いプログラミングスクール「ポテパンキャンプ」

運営する株式会社ポテパンは10,000人以上のエンジニアのキャリアサポートを行ってきております。
そのノウハウを活かして実践的なカリキュラムを随時アップデートしております。

代表の宮崎もプログラミングを覚えサイトを作りポテパンを創業しました。
本気でプログラミングを身につけたいという方にコスパ良く受講していただきたいと思っておりますので、気になる方はぜひスクール詳細をのぞいてくださいませ。