0

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

 - 0.5582%
 - 0.6985%
 - -0.1589%
 - 0.9856%
 - -0.6589%

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

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

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

 - 55
 - 69
 - -15
 - 98
 - -65

としてキャストしてからfloat、に変換してみましたinteger。私もfloorコマンドを試しましたが、私の場合はそうではありませんでしたが、成功しませんでした。これを行う方法はないと思います。

4

4 に答える 4

3
SELECT CAST((columnName * 100) as INTEGER) NewValue
FROM TableName;
于 2012-11-14T09:40:23.280 に答える
1

これを試して:

select cast(substring(col,0,charindex('.',col)+3) as float)*100 
from table1


SQlフィドルデモ

于 2012-11-14T09:44:12.417 に答える
1

これは機能するはずです:

SELECT 
  CAST( CASE WHEN LEFT(VALUE, 1) = '-' THEN '-' ELSE '' END 
  + SUBSTRING(
        Value, 
        CASE WHEN LEFT(VALUE, 1) = '-' THEN 4 ELSE 3 END,
        2)
  AS INT) AS TotalMargin
FROM TableName

フィドル-デモ

于 2012-11-14T09:45:49.960 に答える
0

これを試して

UPDATE [SomeTable] 
SET p7.pa_value = 
    (CASE 
         WHEN LEN(LTRIM(p7.pa_value)) > 8 
            THEN  CAST(RIGHT(p7.pa_value, LEN(p7.pa_value) - 2) AS NUMERIC(10, 2))
         ELSE CAST(LTRIM(p7.pa_value) AS NUMERIC(10, 2))
     END);
GO

これにより、文字列の先頭に不要な「-」が含まれているかどうかがチェックされ、それに応じて各ケースが処理されます。

これがお役に立てば幸いです。

于 2012-11-14T09:56:40.340 に答える