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

我要做的是删除所有内容并仅保留 5 个字符(如果字符串前面有 -(减号),则保留 6 个字符)。它应该看起来像这样:

 55.82
 69.85
 -15.89
 98.56
 -65.89

我尝试将其转换为 afloat然后将其转换为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 开始。
  • 内部 convert 函数将 string 转换为 float 以进行除法,外部 convert 将结果值改回 varchar 类型。
于 2012-12-17T09:35:13.403 回答
0

如果你知道逗号后面总是有四位数字,你可以使用它,虽然我不相信它是完美的:

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