5

多くの数値列(一部のINT、一部のFLOAT)を持つMySQLテーブルがあります。mysql Ver 14.14 Distrib 5.1.41, for debian-linux-gnu (x86_64) using readline 6.1次のように、MySQLコマンドラインクライアント(具体的には)でクエリを実行したいと思います。

SELECT * FROM table WHERE foo;

残念ながら、数値フィールドの値が10 ^ 6を超えると、このクライアントは結果を科学的記数法で表示するため、結果を読み取ることが困難になります。

クエリの各フィールドをFORMAT化することで問題を修正できましたが、クエリしたいフィールドとテーブルがたくさんあります。代わりに、すべてのクエリで科学的記数法を無効にするように設定できるクライアント変数またはフラグを見つけたいと思っています。

--helpまたはページで1つを見つけることができず、manGoogleまたはこのサイトを検索することもできませんでした。代わりに、私が見つけたのは、<insert-programming-language>のMySQLAPIを使用する際の科学的記数法の保持/削除に関する議論だけです。

ヒントをありがとうございます。

::編集::

これがテーブルの例です...

mysql> desc foo;
+--------------+-------------+------+-----+-------------------+
| Field        | Type        | Null | Key | Default           |
+--------------+-------------+------+-----+-------------------+
| date         | date        | NO   | PRI | NULL              |
| name         | varchar(20) | NO   | PRI | NULL              |
| val          | float       | NO   |     | NULL              |
| last_updated | timestamp   | NO   |     | CURRENT_TIMESTAMP |
+--------------+-------------+------+-----+-------------------+

およびいくつかの値の例..。

mysql> select * from foo where date='20120207';
+------------+--------+--------------+---------------------+
| date       | name   | val          | last_updated        |
+------------+--------+--------------+---------------------+
| 2012-02-07 | A      |      88779.5 | 2012-02-07 13:38:14 |
| 2012-02-07 | B      |  1.00254e+06 | 2012-02-07 13:38:14 |
| 2012-02-07 | C      |      78706.5 | 2012-02-07 13:38:15 |
+------------+--------+--------------+---------------------+

ここで、3番目のフィールドにロードした実際の値は次のとおりです。

88779.5, 1002539.25, 78706.5390625

値を操作すると、正確に表示されます。

mysql> select date, name, ROUND(val, 10), last_updated from foo where ...
+------------+---+--------------------+---------------------+
| 2012-02-07 | A |   88779.5000000000 | 2012-02-07 13:38:14 |
| 2012-02-07 | B | 1002539.2500000000 | 2012-02-07 13:38:14 |
| 2012-02-07 | C |   78706.5390625000 | 2012-02-07 13:38:15 |

クライアントの何かが、テーブルにさらに有効数字があるにもかかわらず、6つの有効数字しか表示できないように強制しているようです。

次のようなクエリの場合

mysql> select ROUND(*, 2) from foo ...

可能だった、それは素晴らしいだろう!そうしないと、データを検査する必要があるときはいつでも、「ROUND()」で100個の列名を個別にラップするのに時間がかかりません。

興味深いことに、私は時々phpMyAdminインターフェイスを使用して、これらのテーブルの一部のコンテンツを参照します。そのインターフェイスにも、この有効数字の6つの制限があります。したがって、CLIだけに限定されません。

4

3 に答える 3

0

ドキュメントをより完全に読んだ後でも、クライアントがFLOATからの有効数字を6桁しか表示しないように制限する理由はわかりません(特に、テーブル自体が確実にさらに多くを格納している場合)。

それでも、(この疲れたユーザーにとって)許容できる解決策は、FLOATの代わりにDECIMAL(16,4)を使用するようにすべてのテーブルを変更することです。残念ながら、これにより、すべての数値が小数点以下4桁で表示されます(すべて「0」であっても)。しかし、少なくともすべての数値は現在同じ幅であり、私のクライアントはそれらを科学的記数法で表示したり、出力の有効数字の数を制限したりすることはありません。

于 2012-02-14T23:42:07.523 に答える
0

CAST関数を使用すると、特定のフィールドの値がDECIMALとして返されるように要求できませんか?専門家ではなく、試したこともありませんが、それが私が最初に試すことです。

于 2012-02-19T01:41:23.363 に答える
0

私はこれが古いことを知っていますが、これは私を助けました..私はビューを使用しました..

create view foo2 as select date, name, ROUND(val, 10) val, last_updated from foo

次に、foo2でクエリを実行します。phpmyadminでも動作します

于 2018-03-21T04:32:05.610 に答える