• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:少数部の桁数の求め方)

少数部の桁数の求め方

このQ&Aのポイント
  • ExcelデータをADO経由でSQLServerに取込み、その後データの精査を行うプログラムを作成しています。
  • 項目2の小数部が8桁以上はNGとする時の判定方法を教えてください。
  • 不明な点があれば補足させていただきます。

質問者が選んだベストアンサー

  • ベストアンサー
  • jamshid6
  • ベストアンサー率88% (591/669)
回答No.2

とりあえず「数字であること」というところはチェック済であると仮定して、ポイントのところだけコメントしますと、 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)
回答No.3

小数部分が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)
回答No.1

 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サーバーで扱える数値の範囲内に収まっていることを条件とします。

関連するQ&A