![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?8acaa2e)
No.4ベストアンサー
- 回答日時:
いまさらだけどちょっと思いついたので・・・
テンポラリテーブルに一度格納してから表示してみては?
CREATE TEMPORARY TABLE TEMP(STR VARCHAR(100),NUM DOUBLE);
INSERT INTO TEMP SELECT '100/2',100/2;
INSERT INTO TEMP SELECT '101/2',101/2;
SELECT * FROM TEMP;
こんにちは!
テンポラリテーブルというのがあるのですね。
ここに、わり算の結果を挿入すると、有効桁数に関わらず、自然な数字になるように0が切り捨てられるのですね。
mysqlを終了するとテーブルも、きれいさっぱり消えてクリーンですね。
私の環境だとシェルからmysqlを実行した場合、日本語混じりのテーブルがずれて見づらいので、
CGIを介してブラウザからSELECT文を送信して、結果セットをびゃーっと表示する、へぼツールを作りました。
何がへぼかというと、SQLを発行するたびに、別のセッションとなってしまうことです。
テンポラリテーブルを作成するためにCREATE文を発行すると、ブラウザにテーブルが無事作成できたことを通知する文章が表示されると同時にテーブルは抹消されるのでした。
そういうわけでして、
私は、長くて見栄えの悪いSQLであっても1個のSQLで、ばーんと出来る方法を探し求めてしまうのかも
No.3
- 回答日時:
なぜ、そんな部分にこだわって、冗長で分かりづらいことをしたいのか理解に苦しみますが。
「個人的なチョットしたテストのためだけ」ということでしょうか?
簡単な方法としては、CAST関数でDECやDEC(m,n)として、今よりは見やすくはできると思いますけど?
>第三に、SQLで実現可能なことは、極力SQLで実現し、SQLで不可能なことのみ、独自プロ
>グラム中で実現すべきである(という記事を読んだことがある)。
どんな記事を参考にしたのか知りませんが、専門的なサイトや雑誌の記事であれば、記事の内容を誤解していると思いますよ?
「SQLでこんなこともできる」という話と、では実際にシステム開発する場合に、「そういったSQLを書いていいか」という話は、まったく次元の違う話です。
>おそらく自作プログラム中でループ処理を行うよりも、MySQLにやってもらった方が高速
>なのだと思います。
恐らく、ストアドプロシジャか何かの記事を読んだのでしょうかね?
RDBMSのオプティマイザは、より最適なアクセス計画を作るため、技術者が苦心して複雑な処理を組み込んでいます。商用RDBMSなどではバージョンアップを重ね、かなり賢くなってきています。MySQLでは、サブクエリなど、まだまだ他のオープンソースのRDBMSと比べても見劣りする部分が少なくありません。
今回、冗長な編集をSQLで実装しようとしているのは、一番外側のSELECT句でだけでしょうかね?それだけであればまだいいのですが、これを検索条件などでやり始めたら、性能などはまったく出せないものになります。
つまり、DB操作に直接関係しない部分を、SQLでわざわざ処理させるようなことは、高性能を出すように工夫しているRDBMSに、無駄な処理をさせることになります。
>やる必要があったので質問に参ったわけです。
>今回もまた、簡単に実現できる方法がないか先生方に聞きに来たのであります。
先生って。。。
ここは、他人が善意のボランティアでアドバイスしてくれているのであり、
「なぜそんなことをやる必要が生じているのか?」
「もっと適切なことができるのに、知らなかったり、何らかの誤解があるのではないか?」
といったように、解決策のヒントになればと、#2さんも、より親切に接してくれている訳です。
こんにちは
今回は「個人的なチョットしたテストのためだけ」の目的で質問しました。
目的のテストはNo.1のお礼欄へ記した式を用いて、すでに完了しているため、
本スレの目的は情報収集へと移行しつつありますが
質問内容を再度記載すると、わり算の結果を、有効桁数いっぱいまで0を付けずに表示したいというものです。
すなわち次のデータ
0.1234
1.2340
2.3400
3.4000
4.0000
を次のように表示させたいというものです。
0.1234
1.234
2.34
3.4
4
CAST関数でDECやDEC(m,n)とする方法は、データ内容に関わらず、小数点以下桁数を全て同じにするだけなので、これでは嫌だなぁと思った次第です。
MySQLに関する興味深い話題をありがとうございます。
私が参考にした記事は、たしか新人研修で読まされたSQLの入門書だったと思います。
MySQLはオープンソースでは最強のDBと信じていたのですが、まだまだ私の知らない、すごいDBがあるのですね。
そんなchukenkenkouさん一押しのRDBは何ですか?
ここは、私の知らないことを知っている人たちがいっぱいいるので敬意を込めて先生と呼んでしまいました。
思えば学校を卒業してから久しく使っていなかった単語だなぁ
No.2
- 回答日時:
前回の桁数合わせのときにもちょっと書きましたが、基本的な考え方が間違っています。
MySQLが出してくれるのは有効桁数をもった数値です。
重要なのは4桁までしか有効に計算してくれないということだけで、逆に0が表示しないと
何桁までが有効かわからなくなります。
これはdouble値の割り算のとき何桁まできちんと計算するかを指定しておいて
無駄な計算をしないための知恵です
くわしくは
http://dev.mysql.com/doc/refman/5.1/ja/server-sy …
実際の運用上はSQLというものはミドルウェアに表示を依存します。
そこで小数点以下をどう表示するかを調整すればいいでしょう。
>いろんな関数を駆使して50、50.5にすることはできますか。
やろうと思えばやれるでしょうけど、やる必要はないし、そこにこだわってるうちは
SQLは上達する見込みはありません
こんにちは。
div_precision_incrementを使って小数点以下桁数を0桁にできました。
有効桁数を把握するために、整数であっても、小数点以下に0000が付くという、ごもっともなご回答に対する私の反論としては、
今回のケースでは表示された値を単純に目で検査するので、0000が邪魔だなぁと思った次第です。
また、本来はミドルウェア中で小数点以下桁数を調整すべきという方針に対しての、反論ですが、
第一にミドルウェアを作る能力がない。
第二に、私の場合、ちょっとしたテスト用にミドルウェアを介さず、すぐにSQLを実行したい場合が、結構ある。
第三に、SQLで実現可能なことは、極力SQLで実現し、SQLで不可能なことのみ、独自プログラム中で実現すべきである(という記事を読んだことがある)。
おそらく自作プログラム中でループ処理を行うよりも、MySQLにやってもらった方が高速なのだと思います。
そして、最後の意見についても、反論します。
やる必要があったので質問に参ったわけです。
SQLに、こだわればSQLが上達するし、こだわらなければ逆にSQL以外のプログラミングが上達します。
そういう私はSQLマスターになる夢は、すでにあきらめており、今回もまた、簡単に実現できる方法がないか先生方に聞きに来たのであります。
No.1
- 回答日時:
MySQLのバージョンを、MySQL 4.0、4.1、5.0といったレベルまでは最低限、提示するようにしてください。
大きな機能拡張以外に、一部の仕様変更があります。列のデータ型、定数ならその指定、実際の算術演算式を、正確に提示してください。
それらの組み合わせで、MySQLが演算の中間結果や最終的な結果のデータ型を決定します。
データ型は、dec(n,4)とかでしょうかね?
ZEROFILLの指定は、してたりしますか?
こんにちは!
MySQLは5.0でした。
yumを覚えたので最新にもできます(すでに最新かな)
データ型はTINYINT、SMALLINT等です
ZEROFILL指定はなしです
今回のケースでは、欲しい値は、
`列` / 2
なので返される値の小数点以下に注目すると、'.0000'、または、'.5000'の2通りしかない事に気づき、次の式で対応しました。
IF(`列` / 2 LIKE '%.0%', `列` DIV 2, TRUNCATE(`列` / 2, 1))
これにより、100、101というデータは50、50.5になりました。
今回は、たまたま、この式で対応できましたが、
2で割る時専用の、貧弱な式です・・・
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(データベース) Accessフォームにて指定のフィールドの平均値を小数点第一位で表示できない 2 2022/08/30 17:19
- C言語・C++・C# C言語について。 5 2023/06/27 18:37
- 数学 以下の問題が分かりません。 8ビット浮動小数点数が、最上位ビットから順に符号1ビット、指数部3ビット 4 2023/07/22 16:06
- Excel(エクセル) エクセルのセルの書式設定・ユーザー定義の条件設定について 1 2022/08/17 21:56
- 統計学 統計学の問題です よろしくお願いします 代表値 次の15件のデータについて,以下の問いに答えよ。 結 1 2023/01/31 18:53
- 統計学 統計学の問題です よろしくお願いします 代表値 次の15件のデータについて,以下の問いに答えよ。 結 5 2023/01/31 23:35
- 情報処理技術者・Microsoft認定資格 情報技術の問題についてです。 10進数の−36を以下のような16ビットの浮動小数点表示にするといくつ 3 2022/05/21 19:53
- Excel(エクセル) Excelのtextboxへの入力で小数点以下に0が続く場合でも正しく表示したい 3 2022/04/11 13:53
- 会計ソフト・業務用ソフト エクセルについて 1 2022/06/15 17:39
- Access(アクセス) Excelの質問 3 2023/02/09 14:57
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
カーソル0件の時にエラーを発生...
-
カーソルを使って、最終行レコ...
-
カーソル宣言をIFで分けられま...
-
Accessで処理経過を表示したい...
-
ACCESSで一括処理する方法
-
わり算の結果が整数でも小数点...
-
テーブルの項目が異なるテーブ...
-
PL/SQL で continue ?
-
SQL plus で改行
-
データ型でFloatとreal の計算...
-
NVLとDECODEのスピード差
-
処理件数を非表示にしたい
-
差し込み後、元データを変更し...
-
外部参照してるキーを主キーに...
-
エクセルで最後の文字だけ置き...
-
フィルターかけた後、重複を除...
-
SQLで特定の項目の重複のみを排...
-
for whichの使い方
-
エクセルで個人用マクロの配布方法
-
SELECT 文 GROUP での1件目を...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
カーソル0件の時にエラーを発生...
-
処理件数を非表示にしたい
-
データ型でFloatとreal の計算...
-
カーソル宣言をIFで分けられま...
-
NVLとDECODEのスピード差
-
Accessで処理経過を表示したい...
-
ストアドプロシージャ_カーソル...
-
カーソルを使って、最終行レコ...
-
ACCESSで一括処理する方法
-
RDBとVSAMの比較
-
300万件のデータの処理について
-
SELECT と INSERT の速度
-
SQL-LOADERの逆のもの
-
動的SQLの処理件数
-
クエリの実行時間の目安
-
PL/SQL で continue ?
-
テーブルの項目が異なるテーブ...
-
カーソルがコミットするとクロ...
-
Oracleデータベースの暗号化
-
カーソルオープンの処理について
おすすめ情報