- ベストアンサー
小数点以下桁数が最大の値に小数点以下桁数を揃えるにはどうしてますか
小数点以下桁数が最大の値に小数点以下桁数を揃えるにはどうしてますか 例えばSELECT文で取ってきた値が、 0.05と0.1だった場合は、0.1を0.10としたいです。 0.5と2だった場合は、2を2.0としたいです。 1と2だった場合は、1も2も、そのままとしたいです。
- みんなの回答 (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
その他の回答 (1)
- yambejp
- ベストアンサー率51% (3827/7415)
一回桁数を変数にとってみるとか・・・ 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; 見た目でもわかるとおり、あまりお勧めできないので受け取った側のミドルウェアで 処理するのが妥当だと思います
お礼
こんばんは! ご返信まことにありがとうございます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行返ってきただけでした・・・ やはり、結果セットを受け取った後のスクリプトの中で編集する方が無難ぽいですね。 個人的には、より高速な方をチョイスしようと思っていたところですが、どちらにせよ一瞬で終わってしまう処理だったり^^
お礼
こんにちは。 私のSQLはダメダメでしたね・・・ いらぬ手間をとらせてしまいました。 当初の予想としては、汎用の関数が用意されていると思っていたのですが、 たとえ、欲しい関数がなくとも、知ってる関数を色々組み合わせて、1個の巧妙なSQL文が作れるのですね!