【问题标题】:How to convert string to integer - weird format如何将字符串转换为整数 - 奇怪的格式
【发布时间】:2012-11-14 09:37:04
【问题描述】:

我有一个名为: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 命令,这不适用于我的情况,但没有任何成功。我相信没有办法做到这一点。

【问题讨论】:

  • 你对小数位数有什么看法?这是常数吗?

标签: sql sql-server-2005


【解决方案1】:
SELECT CAST((columnName * 100) as INTEGER) NewValue
FROM TableName;

【讨论】:

  • 这是我得到的:Syntax error converting the varchar value '-0.0063' to a column of data type int. :(
  • @Slim Here, try it again (added CAST) 希望它现在可以工作。 :D
  • 您是否有需要逗号而不是句点的 NLS 设置?然后,您可以将 to_number 与显式格式模型一起使用。
  • 我的案例有点具体,因为内容中还包含%。这是我尝试但没有成功的方法CAST((CAST(replace (p7.pa_value ,'%','') AS NUMERIC(10,6)) * 100) as INTEGER) NewValue,
  • 嘿,成功了!非常感谢!!!我花了大约 3 个小时寻找解决方案!再次感谢!
【解决方案2】:

试试这个:

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


SQl fiddle demo

【讨论】:

    【解决方案3】:

    这应该可行:

    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
    

    Fiddle-Demo

    【讨论】:

      【解决方案4】:

      试试这个

      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
      

      这会检查字符串是否有前导不需要的'-',并相应地处理每种情况。

      我希望这会有所帮助。

      【讨论】:

        猜你喜欢
        • 2017-02-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-10-16
        • 2016-01-07
        • 1970-01-01
        • 2017-02-22
        相关资源
        最近更新 更多