【问题标题】:How can I convert string '1234-2345' to integer? [closed]如何将字符串 '1234-2345' 转换为整数? [关闭]
【发布时间】:2015-07-27 02:48:21
【问题描述】:

如何将字符串转换为整数?

DECLARE @string NVARCHAR(30)='1234-2345'

如何将@string 转换为整数类型?

【问题讨论】:

  • 您希望1234-2345 转换成哪个号码?
  • 我想要字符串,因为它是我的整数。不可能吧?
  • 所以你想得到 12342345 作为结果?
  • 那么结果应该是12342345(去掉所有非数字)还是-1111(作为减法的结果)?
  • 您想要 1) 1234,还是 2) 12342345,还是 3) 2345,还是 4) -1111(即 1234 减去 2345)?

标签: sql sql-server database sql-server-2008-r2 type-conversion


【解决方案1】:

一些开箱即用的想法。现在字符串变成了一个数学问题,结果转换为 int。

DECLARE 
 @STR NVARCHAR(50) = N'12345-235',
 @SQL NVARCHAR(MAX) = '',
 @PRAMS NVARCHAR(MAX) = N'@RETURN AS INT OUTPUT'

SET @SQL = N'SELECT @RETURN = CAST((' + @STR + N') AS INT)'

EXEC SP_EXECUTESQL @SQL , @PRAMS, @RETURN = @RETURNED OUTPUT

SELECT @RETURNED

【讨论】:

    【解决方案2】:

    根据您的上一条评论:

    我需要 1234-2345,其中 - 是一个符号

    这是不可能的。整数数据类型不能包含任何符号字符。

    【讨论】:

      【解决方案3】:

      如果您只想从字符串中删除“-”,那么您可以使用替换功能 并将其转换为 int 类型。 如下:

      DECLARE @string NVARCHAR(30)='1234-2345'
      
      SELECT CAST(REPLACE('1234-2345','-','') as int)
      

      【讨论】:

        【解决方案4】:

        如果我理解正确,你需要:

        DECLARE @Result INT
        DECLARE @string NVARCHAR(30)='1234-2345'
        SELECT @Result = CONVERT(INT, REPLACE(@string, '-', ''))
        
        SELECT @Result --Your desired result
        

        如果你想要你的表达式的结果:

        DECLARE @Result INT
        DECLARE @string NVARCHAR(30)='1234-2345'
        
        SELECT  @Result = CAST(LEFT(@string, CHARINDEX('-', @string) - 1) AS INT) -
                          CAST(RIGHT(@string, CHARINDEX('-', @string) - 1) AS INT)
        
        SELECT @Result --Your desired result
        

        【讨论】:

          【解决方案5】:

          如果你的意思是 1234 减 2345 那么

          SELECT CAST((1234-2345) AS INT)
          SELECT CAST((@string) AS INT)
          

          如果意味着删除 - 符号,那么

          SELECT CAST(REPLACE('1234-2345','-','') as int)
          SELECT CAST(REPLACE(@string,'-','') as int)
          

          【讨论】:

          • 如果@string 是'1234-2345',那么SELECT CAST((@string) AS INT) 将不起作用。实际上,您的第一个 sn-p SELECT CAST((1234-2345) AS INT) 正在工作,只是因为 1234-2345 已经是减法的结果,并且这里没有任何字符串的转换。
          【解决方案6】:

          您可以删除破折号并将结果转换为整数。 SELECT CAST(REPLACE('1234-2345','-','') as int)

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2012-11-04
            • 2012-05-01
            • 1970-01-01
            • 2020-12-10
            • 1970-01-01
            • 2018-05-02
            • 2013-12-29
            相关资源
            最近更新 更多