sql - 如何在不创建函数或使用 STRING_SPLIT 函数的情况下拆分分隔字符串
问题描述
需要在不使用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”
解决方案
创建了以下函数:
使用 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
推荐阅读
- javascript - 处理 JSON 上更改键名的最佳方法是什么?
- python - 使用 pandas 使用 if 条件生成 csv 文件
- json - 在骇客新闻中的颤振小部件测试中,类型“int”不是“String”类型的子类型
- python-3.x - 如何将特定的png文件从一个文件夹编译到另一个文件夹
- mysql - 使用 Laravel 每月向 Mysql 数据库中的列添加值
- c++ - 如何检测传递给 std::bind 的实例已破坏
- java - 打开浏览器和导航 - Java 自动化测试 Selenium
- android - 从playstore下载后,应用程序在启动时崩溃
- web-services - 在 WSDL 上执行基本身份验证
- tensorflow - 使用 coremltools 转换 tensorflow 检测模型