0

この質問は、以前の質問の1つとほぼ同じです。これは、ここにあります

pa_valueレコードを保持するという名前のフィールドがありvarcharます。このフィールドには、次のようなレコードが含まれています。

 0,5582
 0,6985
 -0,1589
 0,9856
 -0,6589

次のコードを使用してこれらの結果を取得しています。

CAST (replace (p7.pa_value ,'%','') AS float (3,0)) as TotalMargin

私がやろうとしているのは、すべてを削除して5文字だけ(または文字列の前に-(マイナス)がある場合は6文字)を残すことです。次のようになります。

 55.82
 69.85
 -15.89
 98.56
 -65.89

としてキャストしてからfloat、に変換してみましたinteger。私もfloorコマンドを試しましたが、私の場合はそうではありませんでしたが、成功しませんでした。常に構文エラーメッセージが表示されます。私はこれを行う方法はないと信じています

4

2 に答える 2

1
SELECT p7.pa_value=CASE WHEN LEFT( p7.pa_value,1)='-' THEN '-' + 
           CONVERT(varchar(max),CONVERT(float,substring(p7.pa_value,4,4))/100) ELSE 
           CONVERT(varchar(max),CONVERT(float,substring(p7.pa_value,3,4))/100)  END
FROM <table_name>

何が行われているのか..

  • 開始文字が「-」であるかどうかを確認してください。
  • はいの場合は、位置4から文字列を抽出し、そうでない場合は、位置3から文字列を抽出します。
  • 内側の変換関数は文字列を除算のためにfloatに変換し、外側の変換は結果の値をvarchar型に戻します。
于 2012-12-17T09:35:13.403 に答える
0

カンマの後に常に4桁あることがわかっている場合は、これを使用できますが、完璧ではないと思います。

CONVERT(NUMERIC(9,2), REPLACE(REPLACE(p7.pa_value, '%', ''), ',', '')) / 100
于 2012-12-17T08:09:00.003 に答える