- ベストアンサー
少数部の桁数の求め方
- ExcelデータをADO経由でSQLServerに取込み、その後データの精査を行うプログラムを作成しています。
- 項目2の小数部が8桁以上はNGとする時の判定方法を教えてください。
- 不明な点があれば補足させていただきます。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
とりあえず「数字であること」というところはチェック済であると仮定して、ポイントのところだけコメントしますと、 REVERSE関数を使うのが一番楽かと思います。 SELECT 項目1, case 項目1の判定結果 end as 結果1, 項目2, CASE WHEN CHARINDEX('.',REVERSE(項目2))<=9 THEN 'OK' ELSE 'NG' END as 結果2 INTO #TableA FROM TableA 「文字列をひっくり返して、小数点が9文字目までにあるならばOK」 ということで。 ただし、1234.123456789はNGでも、1234.123456780はOKにしたいという場合は、もう少し複雑になりますかね。 (Reverseして、floatに変換して、Floorかけて、numericに変換してLenを取るなど。まあ関数をかぶせまくればできなくはないです)
その他の回答 (2)
- ngoma2008
- ベストアンサー率36% (9/25)
小数部分が8桁より多い場合、'NG'を表示させます。 select 'NG' where ( 100000000*(123.123456789-floor(123.123456789)) -floor(100000000*(123.123456789-floor(123.123456789))) )>0 要するに、小数部分を100000000倍してさらに小数部分があるかどうかを調べることで小数部分が8桁より多いかどうか調べています。
- mitoneko
- ベストアンサー率58% (469/798)
SQLサーバーの関数をよく知らないため、考え方だけ。 項目2が全部数値であると仮定できるなら ・項目2を数値に変換 ・項目2の100,000,000倍を小数点以下切り捨て ・これを項目2の100,000,000と比較 結果が同じなら、OK。違えばNGです。 文字列から数値への変換の関数をto_num()とし、切り捨ての関数をtrunc()とすると to_num(項目2)*100000000 = trunc(to_num(項目2)*100000000) という感じでしょうか。 ただし、「項目2*10,000,000」の結果がsqlサーバーで扱える数値の範囲内に収まっていることを条件とします。