Webサイト制作コースのお申し込みはこちら Webサイト制作コースのお申し込みはこちら

SQLのcastについてまとめています。

SQLのcastの構文

cast( 値 as データ型)という構文で型の変換が可能です。

下記は、emp_no(社員番号)とbirth_date(誕生日)をCHAR型に変換し、concatで文字列として連結した例です。

SELECT Concat(Cast(emp_no AS CHAR), Cast(birth_date AS CHAR), 
       Cast(hire_date AS CHAR)) 
FROM   employees 
LIMIT  10; 

+---------------------------------------------------------------------------------+
| concat(cast(emp_no as char), cast(birth_date as char), cast(hire_date as char)) |
+---------------------------------------------------------------------------------+
| 100011953-09-021986-06-26                                                       |
| 100021964-06-021985-11-21                                                       |
| 100031959-12-031986-08-28                                                       |
| 100041954-05-011986-12-01                                                       |
| 100051955-01-211989-09-12                                                       |
| 100061953-04-201989-06-02                                                       |
| 100071957-05-231989-02-10                                                       |
| 100081958-02-191994-09-15                                                       |
| 100091952-04-191985-02-18                                                       |
| 100101963-06-011989-08-24                                                       |
+---------------------------------------------------------------------------------+
10 rows in set (0.01 sec)

【関連記事】

SQL castはデータ型の明示的な変換 データベースによって、オプションに差異あり 

なお、castで変換可能なデータ型は以下の通りです。データベース管理ソフトによって、多少の差異があります。

SQL castの使い方

日付を数値に変換する

日付(date型)を数値に変換するとどうなるのか見てみましょう。下記のように、日付の数値がそのままハイフン(-)を除いた形で数値化されました。

mysql> select birth_date, cast(birth_date as decimal) from employees limit 10;
+------------+-----------------------------+
| birth_date | cast(birth_date as decimal) |
+------------+-----------------------------+
| 1953-09-02 |                    19530902 |
| 1964-06-02 |                    19640602 |
| 1959-12-03 |                    19591203 |
| 1954-05-01 |                    19540501 |
| 1955-01-21 |                    19550121 |
| 1953-04-20 |                    19530420 |
| 1957-05-23 |                    19570523 |
| 1958-02-19 |                    19580219 |
| 1952-04-19 |                    19520419 |
| 1963-06-01 |                    19630601 |
+------------+-----------------------------+
10 rows in set (0.00 sec)

上記の例はdecimalですが、signed、unsignedでも同様です。

下記は、emp_no、birth_date、hire_dateをそれぞれ数値に変換して足し算した例です。

mysql> select cast(emp_no as unsigned) + cast(birth_date as unsigned) + cast(hire_date as unsigned) from employees limit 10;
+---------------------------------------------------------------------------------------+
| cast(emp_no as unsigned) + cast(birth_date as unsigned) + cast(hire_date as unsigned) |
+---------------------------------------------------------------------------------------+
|                                                                              39401529 |
|                                                                              39501725 |
|                                                                              39462034 |
|                                                                              39411706 |
|                                                                              39451038 |
|                                                                              39431028 |
|                                                                              39470740 |
|                                                                              39531142 |
|                                                                              39380646 |
|                                                                              39531435 |
+---------------------------------------------------------------------------------------+
10 rows in set (0.00 sec)

数字以外の文字列を数値にcastすると0になる

mysql> select cast("abc" as unsigned );
+--------------------------+
| cast("abc" as unsigned ) |
+--------------------------+
|                        0 |
+--------------------------+
1 row in set, 1 warning (0.00 sec)

数値以外の文字列を数値にcastすると、0となります。上記の例絵は、abcという文字列をunsigned(符号なし整数)にcastした結果です。

ちなみに-1の場合は、signedの場合は-1に、unsignedの場合は補数表記になります。

mysql> select cast("-1" as unsigned );
+-------------------------+
| cast("-1" as unsigned ) |
+-------------------------+
|    18446744073709551615 |
+-------------------------+
1 row in set, 1 warning (0.00 sec)

mysql> select cast("-1" as signed );
+-----------------------+
| cast("-1" as signed ) |
+-----------------------+
|                    -1 |
+-----------------------+
1 row in set (0.00 sec)

まとめ

ポテパンダの一言メモ
  • castはデータ型を変換する関数
  • データを数値に変換すると四則演算が、文字列に変換すると連結などの文字列操作が可能
  • 数字以外の文字列を数値に変換すると0になる。

 

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

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

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

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

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

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

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

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

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

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

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