如何在不创建函数或不使用STRING_SPLIT函数的情况下分割定界字符串

时间:2019-06-06 10:30:30

标签: sql database sql-server-2012 sql-server-2016

无需使用STRING_SPLIT函数就可以在代码中分割定界字符串。

这是在兼容模式110(SQL Server 2012)中运行的SQL Server 2016中,遗憾的是无法更改。

SELECT
    rsys.Netbios_Name0 As Name,
    (SELECT bg.Name
     FROM vSMS_BoundaryGroup bg
     WHERE bg.GroupID = value) As 'Boundary Group',
    rsys.Full_Domain_Name0 AS Domain
FROM
    v_R_System rsys
INNER JOIN 
    v_GS_BOUNDARYGROUPCACHE bgc ON bgc.ResourceID = rsys.ResourceID
OUTER APPLY 
    STRING_SPLIT(bgc.BoundaryGroupIDs0, ',') 

我收到此错误:

  

第208条消息,第16级,状态1,第1行
  无效的对象名称“ STRING_SPLIT”

1 个答案:

答案 0 :(得分:0)

创建了以下功能:

使用XML 创建一个如下所示的表值函数,该函数使用Sql XML功能分割字符串。

CREATE FUNCTION [dbo].StringSplitXML
(
    @String  VARCHAR(MAX), @Separator CHAR(1)
)
RETURNS @RESULT TABLE(Value VARCHAR(MAX))
AS
BEGIN    
 DECLARE @XML XML
 SET @XML = CAST(
    ('<i>' + REPLACE(@String, @Separator, '</i><i>') + '</i>')
    AS XML)

 INSERT INTO @RESULT
 SELECT t.i.value('.', 'VARCHAR(MAX)') 
 FROM @XML.nodes('i') AS t(i)
 WHERE t.i.value('.', 'VARCHAR(MAX)') <> ''

 RETURN
END

下面的示例显示了如何使用上面的函数分割逗号分隔的字符串

SELECT * 
FROM StringSplitXML('Basavaraj,Kalpana,Shree',',')

我的查询

SELECT
rsys.Netbios_Name0 As Name
, (SELECT
bg.Name
FROM vSMS_BoundaryGroup bg
WHERE bg.GroupID = value) As 'Boundary Group',
rsys.Full_Domain_Name0 AS Domain
FROM v_R_System rsys
INNER JOIN v_GS_BOUNDARYGROUPCACHE bgc ON bgc.ResourceID = rsys.ResourceID
OUTER APPLY StringSplitXML(bgc.BoundaryGroupIDs0, ',') 
order by rsys.Netbios_Name0

谢谢 https://sqlhints.com/tag/split-delimited-string-in-sql/