MySQL
 Computer >> コンピューター >  >> プログラミング >> MySQL

【MySQL】TRIM()関数で10進数(DECIMAL)の末尾のゼロを削除する方法

MySQLでは、TRIM()関数を使うことで、DECIMAL型(10進数)の値から末尾の不要なゼロを簡単に取り除くことができます。この記事では、具体的な構文と実行例をもとに、その手順をわかりやすく解説します。

末尾のゼロを削除する基本構文

末尾のゼロを削除するには、次のような構文を使用します。

SELECT TRIM(カラム名)+0 FROM テーブル名;

ポイントは、TRIM()の結果に+0を加えているところです。TRIM()単体では値が文字列として扱われてしまうため、+0を加算して数値へ変換することで、末尾のゼロが自動的に削除されます。

実際に試してみよう

1. テーブルを作成する

まず、動作確認用のテーブルを作成します。ここでは、小数点以下2桁のDECIMAL型カラム「Amount」を持つテーブルを用意しました。

mysql> create table removeTrailingZeroInDecimal
    -> (
    -> Id int not null auto_increment,
    -> Amount decimal(5,2),
    -> PRIMARY KEY(Id)
    -> );
Query OK, 0 rows affected (1.01 sec)

2. サンプルデータを挿入する

続いて、INSERT文でいくつかレコードを登録します。

mysql> insert into removeTrailingZeroInDecimal(Amount) values(405.50);
Query OK, 1 row affected (0.22 sec)

mysql> insert into removeTrailingZeroInDecimal(Amount) values(23.05);
Query OK, 1 row affected (0.17 sec)

mysql> insert into removeTrailingZeroInDecimal(Amount) values(12.050);
Query OK, 1 row affected (0.14 sec)

mysql> insert into removeTrailingZeroInDecimal(Amount) values(125.23);
Query OK, 1 row affected (0.14 sec)

mysql> insert into removeTrailingZeroInDecimal(Amount) values(125.00);
Query OK, 1 row affected (0.15 sec)

mysql> insert into removeTrailingZeroInDecimal(Amount) values(126);
Query OK, 1 row affected (0.14 sec)

3. 登録したデータを確認する

SELECT文ですべてのレコードを表示してみましょう。

mysql> select *from removeTrailingZeroInDecimal;

実行結果は以下の通りです。

+----+--------+
| Id | Amount |
+----+--------+
|  1 | 405.50 |
|  2 | 23.05  |
|  3 | 12.05  |
|  4 | 125.23 |
|  5 | 125.00 |
|  6 | 126.00 |
+----+--------+
6 rows in set (0.00 sec)

ご覧のとおり、DECIMAL(5,2)の定義に合わせて、「405.50」「125.00」「126.00」のように末尾にゼロが付いた状態で格納されています。

TRIM() + 0 で末尾のゼロを削除する

それでは、いよいよ末尾のゼロを削除するクエリを実行します。

mysql> SELECT TRIM(Amount)+0 FROM removeTrailingZeroInDecimal;

実行結果:

+----------------+
| TRIM(Amount)+0 |
+----------------+
|          405.5 |
|          23.05 |
|          12.05 |
|         125.23 |
|            125 |
|            126 |
+----------------+
6 rows in set (0.00 sec)

出力結果を見ると、「405.50」は「405.5」、「125.00」は「125」、「126.00」は「126」となり、末尾の余分なゼロがきれいに削除されていることがわかります。一方で、「23.05」や「125.23」のように意味のある数字はそのまま保持されます。

仕組みの補足と注意点

  • なぜ +0 が必要?
    TRIM()関数は本来、文字列の前後の空白を除去するための関数です。引数が文字列として評価されると意図した結果にならないため、+0による暗黙の型変換で数値化し、MySQLの数値表現ルールによって末尾のゼロを除去しています。
  • 元のデータは変更されない
    この方法はあくまで取得時の表示を整形するものであり、テーブル内の元データは書き換えられません。データ自体を恒久的に更新したい場合は、UPDATE文と組み合わせて使用してください。
  • 代替手段
    CASTやFORMAT関数などでも似たような整形は可能ですが、小数点以下の有効桁だけを残したいケースでは、TRIM()+0が最もシンプルで確実な方法です。
  1. MySQLでAUTO_INCREMENTの開始値を手動で指定してテーブルを作成する方法

    MySQLでAUTO_INCREMENTの開始値を手動で指定してテーブルを作成する方法MySQLでは、テーブル作成時にAUTO_INCREMENTオプションを指定することで、連番の開始値を任意の数値に設定できます。これにより、IDを100や1000など、特定の値から採番することが可能になります。以下の手順で、開始値を100に設定したAUTO_INCREMENTカラムを持つテーブルを作成し、その動作を確認してみましょう。1. テーブルの作成まず、AUTO_INCREMENT=100を指定してテーブルを作成します。mysql> create table DemoTable1907 (

  2. MySQLでVARCHAR文字列からハイフン以降の数値を削除する方法(SUBSTRING_INDEX活用)

    MySQLで「John-232」のようなハイフンを含むVARCHAR型の文字列から、ハイフン以降の数値部分を削除したい場合があります。このような処理には、SUBSTRING_INDEX() 関数を使用すると簡単に実現できます。SUBSTRING_INDEX()関数とはSUBSTRING_INDEX(文字列, 区切り文字, 出現回数) は、指定した区切り文字が現れる位置より前の部分文字列を返す関数です。第3引数に「1」を指定すると、区切り文字が最初に出現する位置より前の文字列だけが取得されます。サンプルテーブルの作成まず、動作確認用のテーブルを作成しましょう。mysql> create t