在SQL Server 2008中模仿没有自定义函数的STRING_SPLIT

Avi*_*hol 2 sql t-sql sql-server sql-server-2008

它被问过很多次,但不是这样的.

我在SQL Server 2008上,没有STRING_SPLIT功能(如2016年).

查询返回以下行,请参见下面的单个示例行.你在下面看到的bald实际上是一个单独的字段,所以一varchar列完全有它:

Appple|10|admin|845687|Apr|26|11:32:29|2016|AwesomeApplication.zip
Run Code Online (Sandbox Code Playgroud)

我希望被管道|角色分开.

我无法为此编写CTE或自定义函数.

我必须使用内置的字符串函数(例如CHARINDEX,)在一个select语句中将各个管道分隔元素提取到不同的列中PATINDEX.

有人有任何想法吗?

Sta*_*haw 6

DECLARE @Result Table(Value varchar(50))
DECLARE @x XML
SELECT @X = CAST('<A>' + REPLACE(@StringList, '|', '</A><A>') + '</A>' AS XML)

INSERT INTO @Result
SELECT t.value('.', 'varchar(50)') as inVal
FROM @X.nodes('/A') AS x(t)
Run Code Online (Sandbox Code Playgroud)

这将创建一个包含一列(Value)的表.管道分隔字符串中的每个拆分值都将在此表中创建一条新记录.然后你就可以加入它了.如果不清楚或者它在SQL 2008上不起作用,请告诉我.

如果需要,您可以增加varchar的大小 - 您可以修改查询以拆分不同的值(逗号分隔等).