none
Pack形式のDecimal変換について RRS feed

  • 質問

  • 説明が不明瞭で申し訳ございません。

    ご回答いただいた通り、SQLサーバーのカラム属性はdecimalが望ましいですが、

    COBOLのPACKED-DECIMALで定義した項目は、ファイル出力すると、

    整数1の場合、001C(0x001C)となり、bcpでロードすることができません。

    質問を変えれば、bcpユーティリティで、ファイルの0x001CをSQLサーバーのDecimal項目に数値で1と登録できれば解決します。

    的外れな質問でお耳汚しかもしれませんが、ご教示のほどお願いいたします。

    ------------------------------------------

    お世話になります。

    HOSTからのデータをMF-COBOLを使用して処理しております。

    Pack項目は、BinaryとしてSQLサーバーに保存しておりますが、オンラインから参照させた場合、

    0x001Cのように表示されてしまいます。

    ユーザー公開にはView表を作成し、Binary項目を変換して、0x001C→1、0x001D→-1

    として保存したいと考えております。

    元テーブルをフラットファイルにして、UseBinaryFormatを使用すれば変換できるのはわかるのですが、

    View表で実現する必要があります。また、オンラインからの更新もあるので、

    イメージとしては、PackToDecimal、DecimalToBinary(Decimalではなく、Charでもよい)のような関数を作成し、

    View作成時には、PackToDecimalで変換してテーブルに登録し、更新時にはトリガーを仕掛けて、

    DecimalToBinaryを使用して、元テーブルを更新できないかと考えております。

    どこかに、サンプルとなる情報がないか調べておりますが、なかなか発見できずご質問させていただきました。

    ご教示のほど、よろしくお願いいたします。

    • 編集済み Osatou 2014年3月12日 5:45
    2014年3月10日 8:25

回答

  • なかなかコメントが付きませんね。

    数値として処理したいのであれば、binaryではなく数値に変換してからSQLに送るべきです。

    • 回答の候補に設定 星 睦美 2014年3月17日 5:12
    • 回答としてマーク 星 睦美 2014年3月26日 0:55
    2014年3月11日 23:15
  • 後で思いつきました

    未検証ですが、binaryからdecimalへの一方通行なら
    CAST(REPLACE(REPLACE(REPLACE(dbo.fn_varbintohexstr(@pack),'c',''),'d','-'),'0x','') AS decimal)
    でいけるかもしれません。

    実体はbinaryのまま扱ってView上で変換すれば、逆変換は不要です。
    • 編集済み hihijiji 2014年3月12日 6:27
    • 回答の候補に設定 星 睦美 2014年3月17日 5:11
    • 回答としてマーク 星 睦美 2014年3月26日 0:55
    2014年3月12日 6:13

すべての返信

  • なかなかコメントが付きませんね。

    数値として処理したいのであれば、binaryではなく数値に変換してからSQLに送るべきです。

    • 回答の候補に設定 星 睦美 2014年3月17日 5:12
    • 回答としてマーク 星 睦美 2014年3月26日 0:55
    2014年3月11日 23:15
  • ヒントだけです。

    パック10進数は、1Byte( binary(1) )に着目すると
    00 ~ 99 で100種
    +0 ~ +9 で10種
    -0 ~ -9 で10種
    の120種しかなさそうですから、変換用のテーブルを作ると処理しやすいかもしれません。
    2014年3月12日 3:43
  • 後で思いつきました

    未検証ですが、binaryからdecimalへの一方通行なら
    CAST(REPLACE(REPLACE(REPLACE(dbo.fn_varbintohexstr(@pack),'c',''),'d','-'),'0x','') AS decimal)
    でいけるかもしれません。

    実体はbinaryのまま扱ってView上で変換すれば、逆変換は不要です。
    • 編集済み hihijiji 2014年3月12日 6:27
    • 回答の候補に設定 星 睦美 2014年3月17日 5:11
    • 回答としてマーク 星 睦美 2014年3月26日 0:55
    2014年3月12日 6:13