【问题标题】:Converting varchar to int将 varchar 转换为 int
【发布时间】:2013-02-22 10:11:05
【问题描述】:

我有以下代码; 我正在尝试将 varchar 转换为 int,但出现错误。

基本上我想得到以下结果:

@OutletID = 423,324

谁能帮忙?

Declare @outlet varchar(1000),
    @outletID int


Select @outlet = '423,324'


Select '@Outlet',@outlet


Select @OutletID = Convert(int, @outlet, @OutletID)

将 varchar 值 '423,324' 转换为数据类型 int 时转换失败

【问题讨论】:

    标签: sql type-conversion


    【解决方案1】:

    在转换之前删除逗号(我假设它们是千位分隔符):

    select @OutletID = cast(replace(@outlet, ',', '') as int)
    

    【讨论】:

    • 不,它们不是千位分隔符,它是两个不同的数字/ID
    • 好吧,你希望 SQL Server 如何在一个整数中存储两个不同的数字?
    • 还有其他方法吗??
    【解决方案2】:

    在转换之前使用替换功能删除所有逗号。 DEMO

    declare @outlet varchar(1000)= '3,324,345', @outletId int
    
    select @outletId = convert(int,replace(@outlet,',',''))
    select @outletId
    

    或者,如果您试图将它们分成两个变量(根据上面的评论),那么; DEMO

    declare @outlet varchar(1000)= '123,345', @id1 int, @id2 int
    
    select @id1=left(@outlet,charindex(',',@outlet,1)-1),
           @id2=right(@outlet,len(@outlet)-charindex(',',@outlet,1))
    
    select @id1,@id2
    

    【讨论】:

      【解决方案3】:

      根据您的问题,您可以使用REPLACE 作为演员表的一部分:

      select cast(replace(replace(@v3, char(13), ''), char(10), '') as int)
      

      如果这是经常发生的事情,最好清理数据并修改表格的填充方式,以便在输入之前删除 CR 和 LF。

      或转到此链接:

      http://msdn.microsoft.com/en-IN/library/ms187928.aspx

      【讨论】:

        猜你喜欢
        • 2013-02-28
        • 2013-11-27
        • 2017-12-11
        • 2013-07-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多