Split String Возвращение только первого значения - PullRequest
0 голосов
/ 28 декабря 2018

Мой код разделенной строки по какой-то причине возвращает только первое значение.Я не могу понять это, поэтому любая помощь будет оценена.Я использую следующее.

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

1 Ответ

0 голосов
/ 28 декабря 2018

Проблема в том, что вы определили varchar слишком маленьким.

declare @CYEnd varchar(4) = '2015, 2016, 2017'

Если вы запустите этот PRINT @CYEnd после объявления, вы увидите, что переменная равна только 2015.

Увеличьте эту переменную, и она будет работать.

...