プロが教える店舗&オフィスのセキュリティ対策術

小数点以下桁数が最大の値に小数点以下桁数を揃えるにはどうしてますか

例えばSELECT文で取ってきた値が、
0.05と0.1だった場合は、0.1を0.10としたいです。
0.5と2だった場合は、2を2.0としたいです。
1と2だった場合は、1も2も、そのままとしたいです。

A 回答 (2件)

変数はそのセッション内だけで有効なはずですが、まぁ使用したくないなら


サブクエリになるんじゃないでしょうか?

SELECT ROUND(num,(SELECT IF(MAX(LENGTH(num) - LENGTH(floor(num)))>0,MAX(LENGTH(num) - LENGTH(floor(num)))-1,0) FROM hoge)) as num FROM hoge
    • good
    • 1
この回答へのお礼

こんにちは。
私のSQLはダメダメでしたね・・・
いらぬ手間をとらせてしまいました。

当初の予想としては、汎用の関数が用意されていると思っていたのですが、
たとえ、欲しい関数がなくとも、知ってる関数を色々組み合わせて、1個の巧妙なSQL文が作れるのですね!

お礼日時:2010/06/22 15:29

一回桁数を変数にとってみるとか・・・


double型のnumというフィールドをつかって処理すると

SELECT @KETA:=MAX(LENGTH(num) - LENGTH(floor(num))) FROM `hoge`;
SELECT ROUND(num,IF(@KETA>0,@KETA-1,0)) as num FROM hoge;

見た目でもわかるとおり、あまりお勧めできないので受け取った側のミドルウェアで
処理するのが妥当だと思います
    • good
    • 0
この回答へのお礼

こんばんは!
ご返信まことにありがとうございますm(__)m

SQLで変数なんて使えるのですね!
しかし、この変数はいつまで保持されるのだろうという恐怖があり、試してません^^;

代わりに2行目の@KETAという部分を、
MAX(LENGTH(num) - LENGTH(floor(num)))に置き換えて、
SELECT ROUND(num,IF(MAX(LENGTH(num) - LENGTH(floor(num)))>0,MAX(LENGTH(num) - LENGTH(floor(num)))-1,0)) as num FROM hoge
という風にして試してみました。
私的にはこれで行けると思ったのですが、結果はnumの値(?)が1行返ってきただけでした・・・

やはり、結果セットを受け取った後のスクリプトの中で編集する方が無難ぽいですね。
個人的には、より高速な方をチョイスしようと思っていたところですが、どちらにせよ一瞬で終わってしまう処理だったり^^

お礼日時:2010/06/22 00:01

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!