もう迷わない!MySQLで数値と文字列をカンタンに変換する方法

スポンサーリンク
Web開発者向け HTML/CSS/JavaScriptに強いエディタ3選

MySQLを使っていると、数値から文字列に変換する、逆に文字列から数値に変換する必要がある場面がちょこちょこ出てくると思います。

この記事では、MySQLで数値と文字列を安全に・確実に変換する方法を、初学者にもわかるように、具体例とともに丁寧に解説していきます。
CAST()って何?」「CONVERT()っていつ使うの?」といった疑問を解消しつつ、実務でも安心して使える知識が身につく内容にしました。

間違った情報や曖昧な表現は避け、できるだけシンプルで再現性のあるコードだけを載せています。
「なんとなく動いた」ではなく、「どうしてそうなるのか」がきちんと理解できるようになるはずです。

これからMySQLを使っていく上で、型変換の知識はとても重要な基礎スキルです。ぜひ、この記事を通してしっかり身につけていきましょう!

数値→文字列に変換する方法

MySQLでは、数値(たとえば 12345)を文字列(たとえば '12345')として扱いたい場面があります。たとえば、

  • 数値を文字列として結合したいとき(電話番号 + 名前 みたいな)
  • フォーマットを整えて出力したいとき
  • 他の文字列型カラムとJOINや比較をするとき

こういったケースで、数値を「文字列化」して扱う必要が出てきます。
ここでは、そのやり方を3つ紹介します。

CAST()関数で変換する方法(基本)

SELECT CAST(12345 AS CHAR);

CAST() は、MySQLで型変換をするときの基本の関数です。

この場合、12345(数値)を文字列(CHAR)に変換します。結果は '12345' という文字列になります。

ポイント

  • CHAR は文字列型の1つ(VARCHARでもOK)
  • CAST() を使うと、意図的な変換になるので読みやすく、他の人にも親切

CONVERT() 関数でも同じことができる

SELECT CONVERT(12345, CHAR);

CAST() と似た関数に CONVERT() があります。実は、ほぼ同じ動作をします。

違いはほとんどないですが、SQLの方言によっては CONVERT() をよく使うDBもあるので、覚えておくと便利です。MySQLでも安心して使えます。

文字列との連結で、「暗黙的に変換される」ことも

SELECT 12345 + '678';    -- → 19123(数値同士の加算)
SELECT 12345 + 'abc';    -- → 12345('abc'は0と見なされる)

SELECT CONCAT(12345, '円'); -- → '12345円'

文字列と数値を一緒に使うと、MySQLは自動でどちらかの型に変換してくれます。これを「暗黙の型変換」といいます。

ただしこれ、便利な反面ちょっと危険です。
たとえば 'abc' のような文字列があると、0として扱われてしまうので、意図しない結果になりがちです。

おすすめは「明示的に変換すること」。暗黙の変換に頼りすぎると、バグの原因になります。

補足:桁区切りや小数点のフォーマットを整えるなら FORMAT()

SELECT FORMAT(1234567.89, 2); -- → '1,234,567.89'

金額などの見た目を整えたいときは FORMAT() が便利です。
カンマ区切りにしたり、小数点以下の桁数をそろえたりできます。

  • 第1引数:数値
  • 第2引数:小数点以下の桁数

これは数値を文字列として整形して返す関数なので、「数値 → 文字列」変換の一種と考えられます。

文字列→数値に変換する方法

逆に、文字列を数値に変換したい場面もよくあります。たとえば、

  • CSVファイルからインポートしたら、すべての値が文字列になっていた
  • フォームから入力された数値が '123' のような文字列だった
  • テーブルの設計上、数値が VARCHAR型 で保存されていることがある

このような場合は、文字列を正しく数値に変換する必要があります。ここでも CAST()CONVERT() を使えばOKです。

CAST() を使って数値に変換する

SELECT CAST('456' AS UNSIGNED);
SELECT CAST('123.45' AS DECIMAL(10,2));

CAST() 関数で、文字列を UNSIGNEDDECIMAL などの数値型に変換できます。

  • UNSIGNED:符号なし整数
  • SIGNED:符号あり整数(省略するとデフォルトでこれ)
  • DECIMAL(10,2):精度を指定した小数

ポイント

文字列がきれいな数字(例:'123', '456.78')であれば問題なく変換できます。

CONVERT() を使う方法も同じ

SELECT CONVERT('789', UNSIGNED);

CONVERT() でも CAST() と同様に数値型に変換できます。
使いやすい方を選んでOKです(MySQLではどちらも安定動作)。

数値演算に使うと自動で変換される

SELECT '100' + 50;    -- → 150
SELECT '123.45' * 2;  -- → 246.90

文字列と数値を演算すると、MySQLは自動的に文字列を数値に変換してくれます。

とても便利ですが、注意点もあります。

注意:文字列が「数字っぽくない」とどうなる?

SELECT CAST('123abc' AS UNSIGNED); -- → 123
SELECT '123abc' + 0;               -- → 123

SELECT CAST('abc123' AS UNSIGNED); -- → 0
SELECT 'abc123' + 0;               -- → 0

MySQLは、先頭から読み取れる部分だけを数値と見なします。
つまり、

  • '123abc' → 先頭の 123 はOK → 結果は 123
  • 'abc123' → 数字で始まってない → 結果は 0

この動きは少しクセがあるので、「文字列に数字以外が混ざっていないか」事前チェックが超重要です。

実務でよくある応用パターン

MySQLでの「数値⇔文字列」の変換は、理屈だけでなく実際の現場でどう使うかがとても大事です。

ここでは、筆者自身が現場で経験したり、よく質問されたりしたケースをいくつかご紹介します。

数値をゼロ埋めしたいとき

SELECT LPAD(7, 4, '0');  -- → '0007'

商品番号や社員IDなど、「桁をそろえて表示したい」ときには LPAD() 関数が便利です。

  • 第1引数:元の値
  • 第2引数:最終的な文字数
  • 第3引数:埋める文字(通常は ‘0’)

LPAD(CAST(id AS CHAR), 4, '0') のように、数値を一度文字列に変換してから使うのがポイントです。

数値に単位や記号をつけて出力したいとき

SELECT CONCAT(CAST(price AS CHAR), ' 円') AS display_price
FROM items;

金額や重量、パーセンテージなどを「見せ方」として整えるケースは多いです。

このときも、CASTして文字列化 → CONCATで連結という手順が安心です。
暗黙的な変換でも動くことがありますが、表示がおかしくなることもあるので、明示的に変換しておくのがベスト。

数値を桁区切りしたいとき

SELECT FORMAT(12345678.9, 2);  -- → '12,345,678.90'

画面や帳票などに金額を出すとき、見やすいようにカンマを入れるには FORMAT() が役立ちます。

ただしこれは文字列として出力される点に注意。
そのまま演算に使うのではなく、「表示専用」として割り切るのが正解です。

まとめ

この記事では、MySQLにおける数値と文字列の相互変換について、基本から実務レベルまでをしっかり解説してきました。

まず押さえておきたいのは、MySQLはとても柔軟に型を変換してくれるということ。
その反面、「勝手に変換されて思わぬ値になる」という落とし穴もあるので、明示的に変換する習慣がとても大切です。

MySQLを使っていて「なぜかこの比較がうまくいかない」「表示がおかしい」と感じたら、まず「型が違っていないか?」を疑うことがトラブル回避の第一歩です。

型変換の知識は、データベース操作の「地味だけど超重要な基礎」。
この部分をおろそかにしないことで、安定して読みやすく、安全なSQLが書けるようになります。

もし、この記事が少しでもあなたの悩みの解決につながったなら、とてもうれしいです!

MySQL
スポンサーリンク
なんくるをフォローする

コメント

タイトルとURLをコピーしました