无法剪切和转换字符串 - 古怪的格式

时间:2012-12-17 07:55:23

标签: sql sql-server-2005

这个问题与我以前的一个问题几乎相同,可以找到HERE 我有一个名为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命令,这不适用于我的情况,没有任何成功。我总是收到语法错误消息。我相信没有办法做到这一点

2 个答案:

答案 0 :(得分: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>

正在做什么......

  • 检查起始字符是否为&#39; - &#39;。
  • 如果是,则从第4位开始提取字符串 从位置3。
  • 内部转换函数将字符串转换为float以进行除法和 外部转换将结果值更改回varchar 类型。

答案 1 :(得分:0)

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

CONVERT(NUMERIC(9,2), REPLACE(REPLACE(p7.pa_value, '%', ''), ',', '')) / 100