拆分字符串 仅返回第一个值



由于某种原因,我的拆分字符串代码只返回第一个值。我无法弄清楚这一点,因此任何帮助将不胜感激。我正在使用以下内容。

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。拆分字符串列表

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

问题是你定义的varchar太小了。

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

如果在声明后运行此PRINT @CYEnd,您将看到变量仅等于 2015

使该变量变大,它就可以工作。

相关内容

最新更新