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

我尝试将其转换为 afloat然后将其转换为integer. 我也尝试了该floor命令,但不适合我的情况,但没有任何成功。我相信没有办法做到这一点。

4

4 回答 4

3
SELECT CAST((columnName * 100) as INTEGER) NewValue
FROM TableName;
于 2012-11-14T09:40:23.280 回答
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 回答
1

尝试这个:

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


SQL 小提琴演示

于 2012-11-14T09:44:12.417 回答
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 回答