将nvarchar转换为int

时间:2014-02-09 13:10:39

标签: sql-server tsql

我想编写一个查询,选择一些记录,如下面的查询但@reseller的类型为nvarchar,并且发生错误,它无法将nvarchar转换为int。我该如何解决?

select * from Factor where code in (@reseller)

@reseller is '1,2,3'

2 个答案:

答案 0 :(得分:0)

使用此函数,它会拆分字符串并返回表中的intvalue。

Create Function dbo.CsvToInt ( @Array varchar(1000)) 
returns @IntTable table (IntValue int) 
AS 
Begin 
  Declare @separator char(1) 
  Set @separator = ',' 
  Declare @separator_position int 
  Declare @array_value varchar(1000)
  Set @array = @array + ',' 
  While patindex('%,%' , @array) <> 0 
  Begin 
     SELECT @separator_position = patindex('%,%' , @array) 
     SELECT @array_value = left(@array, @separator_position - 1) 
     Insert @IntTable Values (Cast(@array_value as int)) 
     SELECT @array = stuff(@array, 1, @separator_position, '') 
  End 
Return 
End 

用户定义函数的一大优点是它们可以在FROM子句中使用。我们可以像这样使用这个函数:

SELECT *
From dbo.CsvToInt('1,5,11')

which returns

IntValue    
----------- 
1
5
11

在你的情况下,你可以像我们一样

SELECT * 
FROM Factor 
WHERE code IN dbo.CsvToInt(@reseller)

查看here

答案 1 :(得分:-1)

您必须选择 @result并使用 CAST 聚合函数将其强制转换为INT,如下所示:

select * from Factor where code in (SELECT‌ CAST(@reseller AS‌ INT))

有关CAST聚合函数的更多信息,请按照下列步骤操作: msdn.microsoft.com/en-us/library/ms187928.aspx