質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
SQL Server

SQL Serverはマイクロソフトのリレーショナルデータベース管理システムです。データマイニングや多次元解析など、ビジネスインテリジェンスのための機能が備わっています。

VBScript

VBScript(Visual Basic Scripting Edition)はMicrosftが開発したスクリプト言語であり、Visual Basicのサブセットです。

Q&A

1回答

8035閲覧

SQL Server の 概数型について

h-yoshinaka

総合スコア118

SQL Server

SQL Serverはマイクロソフトのリレーショナルデータベース管理システムです。データマイニングや多次元解析など、ビジネスインテリジェンスのための機能が備わっています。

VBScript

VBScript(Visual Basic Scripting Edition)はMicrosftが開発したスクリプト言語であり、Visual Basicのサブセットです。

0グッド

1クリップ

投稿2016/06/15 03:43

編集2016/06/29 02:47

現在、SQL Server 2000を使用しています。
テーブルの一部にfloat型が存在しております。

事案としてはSQL Serverをマイグレーションしているのですが、
その際にfloat型が丸められてしまう現象が発生しています。

例:
SQL Server 2000 ⇒ 123.40000001
SQL Server 2000 ⇒ 123.4

マイグレーションは、2000でDBバックアップを行い、
2008でリストアを行っているだけです。
2008でも当然float型です。

マイクロソフトのサイトで、

float 型と real 型を概数型と呼びます。float 型と real 型の動作は、概数型についての IEEE 754 仕様に従います。

とあったのですが、具体的にどのような設定をすれば回避出来るかご教授頂ければ幸いです。

https://technet.microsoft.com/ja-jp/library/ms187912%28v=sql.105%29.aspx

よろしくお願いします。

---追加
浮動小数点をconvertでdecimalへの移行が出来たのですが、
VBSを使用しているのですが、現状float型で拾ってきた値を「5.2356<>0」などの比較がなされておりdecimalで該当ロジックに入ると型の不一致が起きてしまうようです。
ちなみにDBから取得した値は変数に入れることなく直接、「rs_["hoge2]<>0」のような比較がなされています。

VBSでは浮動小数点型を数値型として認識してdecimal型は文字?として扱うのでしょうか??
よろしくお願い申し上げます。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

回答が付かない様なので、参考程度です。

MS-SQL Server 2000 の資料を探したのですが、
MSのサイトは不定期的に変更移転してリンクが切れるので、今現在参照可能な場所です。
(英語原文を当たるばあいは、URL 内の、ja-jp ⇒ en-us として下さい。)

Microsoft SQL Server 2000
https://msdn.microsoft.com/ja-jp/library/ms950404.aspx
https://msdn.microsoft.com/ja-jp/library/aa257103.aspx
float 型と real 型
https://msdn.microsoft.com/ja-jp/library/aa258876(v=sql.80).aspx
float 型:n=124:有効桁数、最大7桁
float 型:n=25
53:有効桁数、最大15桁

現行サイト
float 型と real 型 (Transact-SQL)
https://msdn.microsoft.com/ja-jp/library/ms173773.aspx
float 型:n=124:有効桁数、最大7桁
float 型:n=25
53:有効桁数、最大15桁

変わっていない様子、というより変わったら困る。

SQL Server 2000 ⇒ 123.40000001

⇒桁数:3桁+8桁、11桁、桁数5桁以後、有効桁数7桁まで、値0

SQL Server 2008 ⇒ 123.4

⇒有効桁数分表示されていないが、MS SQL Server Management Studio の場合は、
省略表示になる。

有効桁数7桁であれば、有効桁数分の値としては、正常ですが、
アプリ側(VB6/VBA6系/VB.NET/C#) で、Single の値を書いた時に、
掲示の様に有効桁数分以下の処へ、1が付く場合があるのは、確認しています。

私だったら
1.MS-SQL 2000 の当該Table をCSVでExport して、値を確認してみます。
2.MS-SQL 2008 の当該Table へCSVからImport して、値を確認してみます。
EXCEL BOOK へのExprot等は使用しません。EXCELのシートにも有効桁数はあります。
3.気は進まない方法1、当該DBのコピーを作って、
MS SQL Server 2008の方で、アタッチしてみる。
mdf / ldf は、デタッチしてあるか、サーバーインスタンスが停止されていれば、
Windowsのコピー機能でコピー可能ですが、新サーバーの方で、セキュリティ設定が
必要かもしれません。※1
4.気は進まない方法2:当該DBのコピーを作って、
コピーの方のフィールドの設定:float(n):たぶん24以下になっている設定を、
53にしてみる。

※1:TeraCopy 等を使うとCRCチェック付のコピー&ベリファイが出来るので
安全ですが、セキュリティ設定が必要かもしれません。(OSによります。)
Windows では2Gだったか、4Gだったからのコピーは、BulkCopy になる筈(うろ覚え)

投稿2016/06/16 05:21

編集2016/06/16 05:37
daive

総合スコア2028

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

h-yoshinaka

2016/06/16 08:38

ご回答ありがとうございます。 大変助かります! 私もCSVで値を確認したのですが、 やはりご指摘の通り桁が丸まってしまうようですね・・・。 こんな記事を見つけました。 http://bbs.wankuma.com/index.cgi?mode=al2&namber=75335&KLOG=126 float型から明示的にdecimalに変換した方が良いのかも・・・と悩んでおります。 ただ、その場合、浮動小数点型のfloatに対してどのような桁数をdecimalに持たせることが適切か・・・こちらはPJで頭を悩ませてるところです。 コンバートで皆さんが良い策をお持ちでしたら引き続き回答をお待ちします。 よろしくお願いします。
daive

2016/06/16 09:04 編集

私だったら、 要求が、データベースだけで完結してしまう&本来誤差である値を保持であれば、 decimal:整数桁数、少数桁数、 にすると思います。が、値がどうなるかの検証は必要だと思います。 しかし、上位のアプリ側で、データを書込、更新するのであれば、 上位側の対応が、必要になりませんか? 上位側で、Single で読み書きすれば、概数に付き物の誤差が発生します。 ⇒型変換をどうするかなどは、考慮していません。
h-yoshinaka

2016/06/29 02:43

ありがとうございます。 それが順当ですよね。 検討材料にさせて頂きます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問