none
数値項目の編集について

    質問

  • いつもお世話になっております。

    SQLServerのある数値項目を下記の仕様に変換したいのですが、
    上手くできない為、ご教示頂きたく、投稿させて頂きます。

     列の仕様
      1.小数桁数フィールド ⇒ INT型
      2.計算結果フィールド ⇒ DECIMAL (28,10)
     
     表示の仕様
      計算結果フィールドを、整数部は'#,0'区切りで、小数値は、小数桁数フィールド分表示する。
      
      例: 計算結果フィールド = 1234.1000000000、小数桁数フィールド = 2
          ⇒1,234.10
     
     試してみたこと
      1.CONVERT(DECIMAL(28,小数桁数フィールド),計算結果フィールド)
       ⇒コンパイルエラー

      2.STUFF(DTEST.TestValue, CHARINDEX('.', DTEST.TestValue) + DTEST.CharacteristicDecimals + 1, 10, N'') AS TestValue4
       ⇒カンマ区切りを除けば仕様通り

      3.2にFORMATを加え、FORMAT(STUFF(DTEST.TestValue, CHARINDEX('.', DTEST.TestValue) + DTEST.CharacteristicDecimals + 1, 10, N''),N'#,0.######')
       ⇒引数のデータ型 nvarchar は format 関数の引数 1 では無効です。とエラーになる

      4.3にFORMATの前に、DECIMAL型にCONVERTする必要がありそうですが、そうなると小数桁数が動的なので上手くいかない


    以上、何卒宜しくお願い申し上げます。

    2018年4月5日 4:02

回答

  • ごめんなさい。間違ってました。以下でいかがでしょうか?

    format(計算結果フィールド, N'#,0.' + substring(convert(varchar, power(10, 小数桁フィールド)), 2, 小数桁フィールド))


    ★良い回答には質問者は回答済みマークを、閲覧者は投票を!

    • 回答としてマーク kong0214 2018年4月9日 4:01
    2018年4月9日 2:16

すべての返信

  • 以下のような感じですかね。

    format(floor(計算結果フィールド * power(10, 小数桁数フィールド)) / power(10, 小数桁数フィールド), N'#,0.#0')

    計算結果フィールドがマイナスの場合、floorがいいのかceilingがいいのか、それとも使い分けるのか、また、小数桁数フィールドで指定した桁数に丸める時に、四捨五入にするのか切り捨て、切り上げにするのか、それによって適宜変更して下さい。


    ★良い回答には質問者は回答済みマークを、閲覧者は投票を!

    2018年4月5日 4:42
  • いつもお世話になっております。

    ご連絡が遅れまして申し訳御座いません。

    ご教示いただきました方法で試してみましたが、
    希望しているフォーマットにはなりませんでした。


    私の希望している表示フォーマットを、改めて示します。

     列の仕様
       1.小数桁数フィールド ⇒ INT型
       2.計算結果フィールド ⇒ DECIMAL (28,10)
     
      希望している表示の仕様
       計算結果フィールドを、整数部は'#,0'区切りで、小数値は、小数桁数フィールド分、表示する。
       ※小数桁数フィールドに登録されている値が、表示する「小数第XX位」になります。
       
       例1: 計算結果フィールド = 1234.1000000000、小数桁数フィールド = 0
          ⇒1,234 (小数桁数が0なので、整数値のみ表示)

       例2: 計算結果フィールド = 1234.1234567890、小数桁数フィールド = 3
          ⇒1,234.123 (小数桁数フィールドが3なので、小数第3位まで表示)


    ご教示頂きました方法での表示は下記の通りとなります。
    計算結果フィールドの値が、指定したフォーマットで表示されるだけに見えるのですが、
    ご教示頂いた方法を私が勘違いしているのでしょうか?

      ⇒計算結果フィールド = 1.0000000000、小数桁フィールド = 3
      ,format(floor(1.0000000000  * power(10, 3 )) / power(10, 3), N'#,0.#0')
       ⇒format(floor(1.0000000000 * (1000 / 1000), N'#,0.#0')
       ⇒1.00
      ⇒上記の場合、希望している仕様では「1.000」と表示したいです。


    以上、何卒宜しくお願い申し上げます。

    2018年4月9日 1:21
  • ごめんなさい。間違ってました。以下でいかがでしょうか?

    format(計算結果フィールド, N'#,0.' + substring(convert(varchar, power(10, 小数桁フィールド)), 2, 小数桁フィールド))


    ★良い回答には質問者は回答済みマークを、閲覧者は投票を!

    • 回答としてマーク kong0214 2018年4月9日 4:01
    2018年4月9日 2:16
  • いつもお世話になっております。

    出来ました。
    有難う御座います。

    Formatの表示形式部の文字列を可変にする、という発想が思い浮かびませんでした。

    大変助かりました、誠に有難う御座います。

    2018年4月9日 4:01