データベースを操作する上で、データ型を変換することが求められることも多いと思います。そこで役立つのが「CAST」関数です。CASTを使用することでたとえば、文字列を日付のデータ形式に変更するといったことが簡単にできるようになります。本記事ではデータ型の種類やCASTでデータ型を変換する方法をサンプルコードを用いて解説します。
CASTとは
SQLのCASTとは、データ型を変更するのに用いられる関数です。CAST関数を用いることであるデータ型の値を別のデータ型に変換することができます。たとえば、文字列型の値を日付型や数値型に変換するといったことができます。
そもそもデータ型とは
SQLに限らず、プログラム上で適切にデータを取り扱う上で、データの形式を定義する「データ型」があります。
データ型とは、コンピュータ上でデータを判別するのに用いられるデータ形式の種類を指します。プログラムやデータベース上で変数やデータのメモリ領域に割り当てる際に、データの種類を示すのに用いられます。データ型の種類によって、データが判別され、適切な処理が実行されます。
SQLにおけるデータ型の種類
SQLにおけるデータ型の種類について代表的なものを紹介します。
数値型
データ型 | 概要 | 範囲 |
INTEGER | 整数型 | -2,147,483,648~2,147,483,647 |
FLOAT | 浮動小数点型 | -3.402823466E+38~-1.175494351E-38、0、1.175494351E-38~3.402823466E+38 |
文字列型
データ型 | 概要 | 最大格納可能文字数・サイズ数 |
CHAR | 固定長文字列型 | 1から255文字まで指定可能 |
VARCHAR | 可変長文字列型 | 約65,535文字まで指定可能 |
TEXT | 大文字列型 | 約2GBまでのテキストデータを格納可能 |
※最大長・最大サイズはデータベースの種類によって異なります。
日付型
データ型 | 概要 | 格納内容 |
DATE | 日付型 | 日付を格納する(年、月、日) |
TIME | 時刻型 | 時刻を格納する(時、分、秒) |
DATETIME | 日付時刻型 | 日付と時刻を格納する |
TIMESTAMP | 日付時刻型 | 一意のタイムスタンプを格納し、データの追加・更新時に自動で生成・更新される |
バイナリ型
データ型 | 概要 | 格納内容 |
BINARY | 固定長バイナリ型 | 固定長のバイナリデータを格納する |
VARBINARY | 可変長バイナリ型 | 可変長のバイナリデータを格納する |
BLOB | 大バイナリ型 | 画像、動画、音声など、大きなバイナリデータ(Binary Large Object)を格納する |
※最大格納可能サイズ数はデータベースの種類によって異なります。
論理型
データ型 | 概要 | 格納内容 |
BOOLEAN | ブール型 | 真(TRUE)または偽(FALSE)、未定義(NULL)の値を格納する |
※挙動はデータベースの種類によって異なります。
これらのデータ型は、データベースの種類によって名前、サポート範囲、挙動などが異なる場合があります。データ型はデータの特性と用途に合ったものを選択する必要があります。
CASTでデータ型を変更する方法
【基本構文】
CAST(変換する値やカラム AS 変換したいデータ型)
互換性のあるデータ型に対してのみCASTを適用できます。なお、CASTは、WHERE句などの一般的な式が許可される大抵のコンテキストで許可されています。
正常に変換が行われるよう適切なエラーハンドリングが必要になります。また、データの大きさや内容などによって、データの損失やエラーが発生する場合もあるため注意しましょう。
ここからは具体的なコードを紹介します。
1.文字列型をINTEGER(数値型)に変換する場合
【SQL実行コード】
SELECT CAST(id AS INTEGER) FROM student;
データ型の変更は重要な作業であるため、慎重に行う必要があります。まず、テスト環境で試してから本番環境で実行するのが望ましいです。
2.数値型を文字列型に変換する場合
【SQL実行コード】
SELECT CAST(100 AS VARCHAR(10))+'A';
【実行結果】
100A
【SQL実行コード】
SELECT CAST(100 AS CHAR(10))+'A';
【実行結果】
100 A
CHAR(固定長文字列型)だと変換されたことがわかりやすいですね。
3.文字列型を日付型に変換する場合
文字列をそれぞれ日付型「DATE」、日付時間型「DATETIME」に変換します。
【SQL実行コード】
SELECT CAST('2024-08-27' AS DATE);
【実行結果】
2024/08/27
【SQL実行コード】
SELECT CAST('2024-08-27 19:22:30' AS DATETIME);
【実行結果】
2024/08/27 19:22:30
CHAR(固定長文字列型)だと変換されたことがわかりやすいですね。
日付時間型「DATETIME」変換で時間部分を指定しないと「00:00:00」になります。
注意点
異なるフォーマットの場合
CAST関数で文字列型の値をDATETIME型に変換することで日付と時刻として扱えます。この際、標準的な日付フォーマットである場合は「DATETIME」で問題ありませんが、異なる形式の日付文字列を変換する場合は、「STR_TO_DATE」関数などを使用する必要があります。
たとえば、日付が「2024/08/27 19:22:30」という形式で格納されている場合は次のように記述します。
SELECT date_a,STR_TO_DATE(date_a,'%Y/%m/%d %H:%i:%s') AS datetime FROM sample;
テーブルのデータ型変更
元のテーブルのデータ型は変更されないためテーブル自体のデータ型を変更する場合は、「ALTER TABLE」文を使用します。
【基本構文】
ALTER TABLE テーブル名 ALTER COLUMN カラム名 変更したいデータ型
たとえば、「生徒(student)」テーブルの「ID(id)」カラムのデータ型を文字列型から数値型(INTEGER)に変更する場合は、次のように記述します。
【SQL実行コード】
ALTER TABLE student ALTER COLUMN id INTEGER;
まとめ
CASTを活用することでクエリや計算がしやすくなり、データの処理や分析も効率的に行えるようになります。実務でも数値から文字列への変換、文字列から数値への変換を使う機会は多くあります。使用するデータベースやデータに合わせてCAST関数を活用しましょう。
SQL関連記事
- RDBを操作するデータベース言語「SQL」とは?
- RDB以外のデータベース管理システム「NoSQL」とは?
- RDB管理システム「MySQL」とは?
- RDB管理システム「PostgreSQL」とは?
- RDB管理システム「SQL Server」とは?
- RDB管理システム「SQLite」とは?
- ブラウザ上でMySQLを管理できる「phpMyAdmin」とは?
- データを抽出する「SELECT」文
- データを追加する「INSERT」文
- データを削除する「DELETE」文
- データを更新する「UPDATE」文
- テーブル構造を変更する「ALTER TABLE」文
- 抽出条件を指定する「WHERE」句
- 抽出条件を指定する「HAVING」句
- 複数の抽出条件をまとめる「IN」句
- 重複レコードを除外する「DISTINCT」
- 抽出範囲を指定する「BETWEEN」演算子
- 抽出条件を満たすレコードの存在の有無を調べる「EXISTS」句
- レコード件数を取得する集計関数「COUNT」関数
- データ型を変更する「CAST」関数
- 文字列を切り出す「SUBSTRING」関数
- レコードをグループ化する「GROUP BY」句
- 抽出結果を並び替える「ORDER BY」句
- テーブル間のデータを結合する「JOIN」句
- 内部結合「INNER JOIN」句
- 抽出結果を統合して表示する「UNION」句
- データの曖昧検索「LIKE」句
- データの取得件数を制限する「LIMIT」句
- 条件分岐処理「CASE」式
- 「NULL」の扱い方
- 「主キー」とは?
- 「外部キー」とは?
SQLの勉強方法は?
書籍やインターネットで学習する方法があります。昨今では、YouTubeなどの動画サイトやエンジニアのコミュニティサイトなども充実していて多くの情報が手に入ります。
そして、より効率的に知識・スキルを習得するには、知識をつけながら実際に手を動かしてみるなど、インプットとアウトプットを繰り返していくことが重要です。特に独学の場合は、有識者に質問ができたりフィードバックをもらえるような環境があると、理解度が深まるでしょう。
ただ、SQLに限らず、ITスキルを身につける際、どうしても課題にぶつかってしまうことはありますよね。特に独学だと、わからない部分をプロに質問できる機会を確保しにくく、モチベーションが続きにくいという側面があります。独学でモチベーションを維持する自信がない人にはプログラミングスクールという手もあります。費用は掛かりますが、その分スキルを身につけやすいです。しっかりと知識・スキルを習得して実践に活かしたいという人はプログラミングスクールがおすすめです。
プログラミングスクールならテックマニアがおすすめ!
ITスキル需要の高まりとともにプログラミングスクールも増えました。しかし、どのスクールに通うべきか迷ってしまう人もいるでしょう。そんな方にはテックマニアをおすすめします!これまで多くのITエンジニアを育成・輩出してきたテックマニアでもプログラミングスクールを開講しています。
<テックマニアの特徴>
・たしかな育成実績と親身な教育 ~セカンドキャリアを全力支援~
・講師が現役エンジニア ~“本当”の開発ノウハウを直に学べる~
・専属講師が学習を徹底サポート ~「わからない」を徹底解決~
・実務ベースでスキルを習得 ~実践的な凝縮カリキュラム~
このような特徴を持つテックマニアはITエンジニアのスタートラインとして最適です。
話を聞きたい・詳しく知りたいという方はこちらからお気軽にお問い合わせください。