受講料が最大70%OFF 受講料が最大70%OFF

データベースのテーブルにはそれぞれのカラムにデータ型が定義されていますが、実際にデータとして取得する際、格納されたデータ型とは異なる型で取得したいことも少なくありません。

そこで本記事では、SQLでデータ型を変換するために利用される「CAST関数」と「CONVERT関数」について、基本的な使い方をご紹介していきたいと思います。

ポテパンダの一言メモ

記事内で紹介するサンプルはMySQLデータベースを利用したものです。
データベース毎に利用可能な関数は異なるため、ご利用のデータベースで提供されている関数に読み替えてご利用ください。

SQLでデータ型を変換する方法とは


SQLでデータ型を変換する際、「CAST関数」と「CONVERT関数」を利用することが可能です。

どちらも取得したデータ型を任意の型に変換する関数で、記述方法がそれぞれ少し異なります。

また指定可能なデータ型は下記のいずれかとなりますので、確認しておきましょう。

  • BINARY
  • CHAR
  • NCHAR
  • DATE
  • DATETIME
  • TIME
  • DECIMAL
  • JSON
  • SIGNED
  • UNSIGNED

SQLでデータ型を変換する方法1: CAST関数


まずはCAST関数を利用して、SQLでのデータ型変換について確認していきましょう。

基本構文

CAST関数を利用する場合、下記のように記述します。

SELECT CAST(値 as 変換後のデータ型);

サンプル

では実際に各種データ型を指定して、サンプルで動作を確認してみましょう。

BINARY

整数値に対してBINARY型へ変換するサンプルです。

mysql> SELECT CAST(1 as BINARY);
+--------------------------------------+
| CAST(1 as BINARY)                    |
+--------------------------------------+
| 0x31                                 |
+--------------------------------------+
1 row in set (0.00 sec)

数値からBINARY形式へ変換されていることをご確認いただけます。

CHAR

続いて整数値に対して5桁の文字数指定でCHAR型に変換するサンプルです。

mysql> SELECT CAST(123456789 as CHAR(5));
+----------------------------+
| CAST(123456789 as CHAR(5)) |
+----------------------------+
| 12345                      |
+----------------------------+
1 row in set, 1 warning (0.01 sec)

指定した桁数で表示されていることをご確認いただけます。

NCHAR

文字列を3桁までの文字数指定でNCHAR型に変換するサンプルです。

mysql> SELECT CAST('アイウエオ' as NCHAR(3));
+-------------------------------------+
| CAST('アイウエオ' as NCHAR(3))        |
+-------------------------------------+
| アイウ                               |
+-------------------------------------+ 
1 row in set, 2 warnings (0.00 sec)

指定した文字数で表示されていることをご確認いただけます。

DATE

日付型に変換出来るような数値をDATE型へ変換するサンプルです。

mysql> SELECT CAST(20201013 as DATE);
+------------------------+
| CAST(20201013 as DATE) |
+------------------------+
| 2020-10-13             |
+------------------------+
1 row in set (0.01 sec)

DATE型にフォーマットされた状態で表示されていることをご確認いただけます。

DATETIME

上記のDATE型サンプルで利用した数値をDATETIME型に変換したサンプルです。

mysql> SELECT CAST(20201013 as DATETIME);
+----------------------------+
| CAST(20201013 as DATETIME) |
+----------------------------+
| 2020-10-13 00:00:00        |
+----------------------------+
1 row in set (0.00 sec)

時刻が追加された状態でフォーマットされていることをご確認いただけます。

TIME

今度は時刻のフォーマットに変換可能な6桁の数値をTIME型に変換するサンプルです。

mysql> SELECT CAST(123025 as TIME);
+----------------------+
| CAST(123025 as TIME) |
+----------------------+
| 12:30:25             |
+----------------------+
1 row in set (0.00 sec)

時刻フォーマットに変換されていることをご確認いただけます。

DECIMAL

数値文字列を小数点第一位までの5桁のDECIMAL型に変換するサンプルです。

mysql> SELECT CAST("2000.15" as DECIMAL(5, 1));
+----------------------------------+
| CAST("2000.15" as DECIMAL(5, 1)) |
+----------------------------------+
|                           2000.2 |
+----------------------------------+
1 row in set (0.00 sec)

小数点第二位が四捨五入されて表示されているのをご確認いただけます。

JSON

文字列をJSON型に変換した上で、「JSON_EXTRACT」関数を利用して「name」に設定された値を抽出するサンプルです。

mysql> SELECT JSON_EXTRACT(CAST('{"name": "テスト1", "name2": "テスト2"}' as JSON),"$.name");
+--------------------------------------------------------------------------------------+
| JSON_EXTRACT(CAST('{"name": "テスト1", "name2": "テスト2"}' as JSON),"$.name")         |
+--------------------------------------------------------------------------------------+
| "テスト1"                                                                             |
+--------------------------------------------------------------------------------------+
1 row in set (0.01 sec)

「name」に設定された値である「テスト1」が表示されていることをご確認いただけます。

SIGNED

小数点付きの数値を符号付き整数値のSIGNEDに変換するサンプルです。

mysql> SELECT CAST(1.2 as SIGNED);
+---------------------+
| CAST(1.2 as SIGNED) |
+---------------------+
|                   1 |
+---------------------+
1 row in set (0.00 sec)

小数点の値が切り捨てられ、整数値として表示されていることをご確認いただけます。

UNSIGNED

小数点付きの数値を符号なし整数値のUNSIGNEDに変換するサンプルです。

mysql> SELECT CAST(1.2 as UNSIGNED);
+-----------------------+
| CAST(1.2 as UNSIGNED) |
+-----------------------+
|                     1 |
+-----------------------+
1 row in set (0.00 sec)

ちなみにUNSIGNEDに変換する値をマイナスの値で指定すると、下記のように意図しない数値で変換されるため注意が必要です。

mysql> SELECT CAST(-1.2 as UNSIGNED);
+------------------------+
| CAST(-1.2 as UNSIGNED) |
+------------------------+
|   18446744073709551615 |
+------------------------+
1 row in set (0.00 sec)

SQLでデータ型を変換する方法2: CONVERT関数


SQLでデータ型を変換する方法の2つ目であるCONVERT関数についても確認していきましょう。

基本構文

CONVERT関数を利用する場合、下記のように記述します。

SELECT CONVERT(値, 変換後のデータ型);

サンプル

ではCONVERT関数を利用したデータ型の変換についてもサンプルで確認していきましょう。

サンプルで指定する値はCAST関数と同様のものを利用しますので、実行結果だけを掲載していきます。

BINARY

mysql> SELECT CONVERT(1,  BINARY);
+------------------------------------------+
| CONVERT(1,  BINARY)                      |
+------------------------------------------+
| 0x31                                     |
+------------------------------------------+
1 row in set (0.00 sec)

CHAR

mysql> SELECT CONVERT(123456789,  CHAR(5));
+------------------------------+
| CONVERT(123456789,  CHAR(5)) |
+------------------------------+
| 12345                        |
+------------------------------+
1 row in set, 1 warning (0.00 sec)

NCHAR

mysql> SELECT CONVERT('アイウエオ',  NCHAR(3));
+---------------------------------------+
| CONVERT('アイウエオ',  NCHAR(3))        |
+---------------------------------------+
| アイウ                                 |
+---------------------------------------+
1 row in set, 2 warnings (0.00 sec)

DATE

mysql> SELECT CONVERT(20201013, DATE);
+-------------------------+
| CONVERT(20201013, DATE) |
+-------------------------+
| 2020-10-13              |
+-------------------------+
1 row in set (0.00 sec)

DATETIME

mysql> SELECT CONVERT(20201013, DATETIME);
+-----------------------------+
| CONVERT(20201013, DATETIME) |
+-----------------------------+
| 2020-10-13 00:00:00         |
+-----------------------------+
1 row in set (0.00 sec)

TIME

mysql> SELECT CONVERT(123025,  TIME);
+------------------------+
| CONVERT(123025,  TIME) |
+------------------------+
| 12:30:25               |
+------------------------+
1 row in set (0.00 sec)

DECIMAL

mysql> SELECT CONVERT("2000.15", DECIMAL(5, 1));
+-----------------------------------+
| CONVERT("2000.15", DECIMAL(5, 1)) |
+-----------------------------------+
|                            2000.2 |
+-----------------------------------+
1 row in set (0.00 sec)

JSON

mysql> SELECT JSON_EXTRACT(CONVERT('{"name": "テスト1", "name2": "テスト2"}', JSON),"$.name");
+---------------------------------------------------------------------------------------+
| JSON_EXTRACT(CONVERT('{"name": "テスト1", "name2": "テスト2"}', JSON),"$.name")         |
+---------------------------------------------------------------------------------------+
| "テスト1"                                                                              |
+---------------------------------------------------------------------------------------+
1 row in set (0.00 sec)

SIGNED

mysql> SELECT CONVERT(1.2, SIGNED);
+----------------------+
| CONVERT(1.2, SIGNED) |
+----------------------+
|                    1 |
+----------------------+
1 row in set (0.00 sec)

UNSIGNED

mysql> SELECT CONVERT(1.2,  UNSIGNED);
+-------------------------+
| CONVERT(1.2,  UNSIGNED) |
+-------------------------+
|                       1 |
+-------------------------+
1 row in set (0.00 sec)

さいごに:SQLではデータ取得の際に型の変換が可能!


本記事では、SQLでデータ型の変換に利用されるCAST関数とCONVERT関数の基本的な使い方についてご紹介してきました。

記述方法が異なるだけで、ほとんど同じ動作をする関数ではありますが、SQL標準の関数として認められているのは「CAST関数」です。

各種データベースでの利用を想定する場合、基本的にはCAST関数を利用し、CONVERT関数でしか対応できない変換のみCONVERT関数を利用することをおすすめします。

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

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

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

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

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

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

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

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

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

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

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