2

まず、現在の sybase db のバージョンがAdaptive Server Enterprise 12.5.4であることをお伝えしておく必要があります。これらの種類の変数のいくつか、フォーマット、および文字列型での保存のために、float データ型varcharを sybase convert 関数を介して変換することを目指しています。concat

残念ながら、そうではありません。convert(varchar(20), float_var)またはcast()関数を使用するだけでは、正確な値を正しく返すことはできません。

例えば、 ...

declare @float_var float
begin
    select @float_var =345.1237    --from table actually
    select convert(varchar(20),@float_var)     --return 345.1236999999
end

返される誤った文字列の結果には99999、または00001接尾辞が付いている場合があります。

精度の指定などいろいろ試してみましたが、それでもうまくいかないケースがいくつかあります。sybase の内部関数は正確には機能しません。

これはSybase DBを使用している間の一般的な問題だと思いますが、検索にはほとんど答えがありません. 私の過去の経験では、Sybase ストア プロシージャ ガマーには常に、実行時の許容範囲とエラー発生時の内部修正があります。この問題により、Sybase が内部でどのように機能するのか混乱しました。事前に感謝します。

4

2 に答える 2

2

これにはいくつかの可能な解決策があります。

まず、floatを最初に10進数に変換し、次にvarcharに変換してみましょう。

select cast(cast(@float_var as decimal(13,4)) as varchar)

あるいは、これは私のASEメモリが少し失敗する可能性がある場所です。次のようにSTR関数を使用することです。

Select ltrim(str(@float_var, 25, 5))

結果の左側に空のスペースを埋めるSTR関数として出力をTRIMする必要があります

于 2013-02-01T06:10:12.590 に答える
1

これは私のために働く:

declare @float_var float
begin
    select @float_var = 96.332 
    select cast(cast(@float_var as decimal(13,4)) as varchar)     -- Returns 96.3320
end

declare @float_var float
begin
    select @float_var = 345.1237
    select cast(cast(@float_var as decimal(13,4)) as varchar)     -- Returns 345.1237
end
于 2013-02-04T08:24:40.653 に答える