MySQLでVARCHAR型をINT型にキャストする方法【CAST関数の使い方】
MySQLでVARCHAR型の値を整数(INT)に変換するには、CAST()関数を使用します。この記事では、CAST()関数の基本構文から、実際にテーブルを作成してデータを変換するまでの手順を、具体例とともにわかりやすく解説します。
CAST()関数の基本構文
MySQLでは、CAST()関数を使うことで、あるデータ型から別のデータ型へ値を変換できます。基本構文は以下の通りです。
cast(変換したい値 as 変換後のデータ型)
サンプルテーブルの作成
まず、CREATEコマンドを使って、VARCHAR型のカラムを持つテーブルを作成しましょう。
mysql> create table VarchartointDemo -> ( -> Value varchar(100) -> ); Query OK, 0 rows affected (0.51 sec)
テストデータの挿入
次に、INSERTコマンドでテーブルにレコードを挿入します。クエリは以下の通りです。
mysql> insert into VarchartointDemo values('123');
Query OK, 1 row affected (0.26 sec)
mysql> insert into VarchartointDemo values('234');
Query OK, 1 row affected (0.16 sec)
SELECT文ですべてのレコードを確認してみましょう。
mysql> select *from VarchartointDemo;
実行結果は以下の通りです。
+-------+ | Value | +-------+ | 123 | | 234 | +-------+ 2 rows in set (0.00 sec)
VARCHAR型をINT型にキャストする手順
VARCHAR型の値を整数に変換するには、以下の構文を使用します。
SELECT CAST(カラム名 AS 変換後のデータ型) FROM テーブル名;
それでは、上記の構文を実際に適用して、VARCHAR型を整数(UNSIGNED=符号なし整数)に変換してみます。
mysql> SELECT CAST(Value AS UNSIGNED) FROM VarchartointDemo;
実行結果:
+-------------------------+ | CAST(Value AS UNSIGNED) | +-------------------------+ | 123 | | 234 | +-------------------------+ 2 rows in set (0.00 sec)
出力結果を見ると、VARCHAR型だった値「'123'」「'234'」が、整数の123・234として表示されていることがわかります。このように、CAST()関数を使えば、文字列型から数値型への変換を簡単に行うことができます。
補足:CONVERT()関数との違い
MySQLには、CAST()関数と同様の役割を持つCONVERT()関数も用意されています。両者は基本的に同じ結果を返しますが、CONVERT()関数は文字セット(キャラクタセット)の変換にも対応している点が異なります。単純なデータ型の変換であれば、どちらの関数を使っても問題ありませんので、用途や可読性に応じて使い分けるとよいでしょう。
-
MySQLのCAST関数で数値オーバーフローを処理する方法
MySQLのCAST関数によるオーバーフロー処理とはMySQLでは、数値式を評価する際に結果がデータ型の範囲を超えると、オーバーフローとしてエラーメッセージが返されます。しかし、CAST関数を使って数値をUNSIGNED型に変換することで、このようなオーバーフローを回避し、正しい計算結果を取得できます。オーバーフローが発生するケース例えば、BIGINT型の最大値「9223372036854775807」に1を加算すると、範囲を超えるためMySQLはエラーを返します。mysql> Select 9223372036854775807 + 1;ERROR 1690 (22003): BIGI
-
MySQLでテーブルの最後の10件のレコードを取得する方法
MySQLでテーブルの末尾にある10行(最新の10件)を取得したい場合は、SELECT文とLIMIT句を組み合わせたサブクエリを利用します。この記事では、実際にテーブルを作成し、データを挿入しながら、最後の10件を取得するクエリの手順を具体的に解説します。 1. サンプルテーブルの作成 まず、動作確認用のテーブルを作成します。 mysql> create table Last10RecordsDemo -> ( -> id int, -> name varchar(100) -> ); Query OK, 0 rows affected