【MySQL】DECIMAL型の小数点以下の末尾の0を取り除く方法

Facebook にシェア
Pocket

データベースにMySQLを使っているシステムにおいて、MySQLから数値を文字列として取得してそのまま表示したいということがあったのだけれども、DECIMAL型だとなんと小数点以下の末尾の0がそのまま表示されてしまうことが発覚。

(decimal_timeがDECIMAL(10,3)型で、double_timeがDOUBLE型)

DOUBLE型なら省略してくれるんですけどね。それならと思って、DOUBLE型にキャストしてみようと思ったのですが、MySQLではDOUBLE型へのキャストはできないようです(参考:MySQL :: MySQL 5.6 リファレンスマニュアル :: 12.10 キャスト関数と演算子)。「CAST(decimal_time AS DOUBLE)」というようにキャストしてみようとすると、下記のようなエラーメッセージが表示されました。

いろいろ考えた末、ちょっと長くなるけど、下記のように小数点以下が何桁まであるか調べて、その分の桁数で切り下げすることに。

結果:

DECIMALの小数点以下の桁数の数をどう設定しているかによって変わってくるんですけどね。これが、DECIMAL(10,4)とかだったら、「WHEN MOD(decimal_time, 0.001) = 0 THEN TRUNCATE(decimal_time, 3)」という条件を追加すればいいです。

なお、先ほどDOUBLE型にはキャストできないと書きましたが、調べてみると関数を作成することで、DOUBLE型に変換することができるそうです。
参考:casting – Is it possible to cast a DECIMAL to DOUBLE in MySQL? – Stack Overflow

下記のような関数を作成し、

実際に下記のSQLを実行すると、先ほどと同じ結果となりました。

関数を利用できるなら、こちらのほうが便利かもしれないです。

コメントを残す

メールアドレスが公開されることはありません。