由于某些原因,我的分割字符串代码仅返回第一个值。我无法弄清楚,因此将不胜感激。我正在使用以下内容。
declare @CYEnd varchar(4) = '2015, 2016, 2017'
SELECT * FROM vwRMSGrantsSpending
WHERE CYEnd IN (select ltrim(item) from dbo.SplitStringList(@CYEnd, ','))
应该返回2015、2016和2017。但是仅返回2015。
这里是dbo.SplitStringList
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER FUNCTION [dbo].[SplitStringList](@ListString nvarchar(max), @delim
varchar(2) = ',')
returns @vals table (Item nvarchar(60))
as
begin
declare @CurLoc int, @Item nvarchar(60)
while len(@ListString) > 0
begin
set @CurLoc = charindex(@delim, @ListString, 1)
if @CurLoc = 0
begin
set @Item = @ListString
set @Item = Ltrim(RTrim(@Item))
set @ListString = ''
end
else
begin
set @Item = left(@ListString, @CurLoc - 1)
set @Item = Ltrim(RTrim(@Item))
set @ListString = substring(@ListString, @CurLoc + 1,
Len(@ListString) - @CurLoc)
end
insert into @vals (Item) values (@Item)
end
return
end
答案 0 :(得分:2)
问题是您定义的varchar太小。
declare @CYEnd varchar(4) = '2015, 2016, 2017'
如果在声明后运行此PRINT @CYEnd
,您将看到变量仅等于2015
。
增大该变量,使其起作用。