关于这个 TSQL/XQuery 分隔符分隔符的问题
Posted
技术标签:
【中文标题】关于这个 TSQL/XQuery 分隔符分隔符的问题【英文标题】:question about this TSQL/XQuery delimiter splitter 【发布时间】:2021-12-01 07:18:12 【问题描述】:以下代码是在 TSQL 中拆分分隔 varchar 的常用方法。我的问题是关于 最后 2 行中的语法。为什么我们选择 N.Value() 并为 xml.nodes 赋予别名 T(N)。
我没有遇到过这种 T(N) 语法,我不确定它的含义以及 N.Value 中的 N 是什么 参考。我试过谷歌这个,但发现很难得到答案,有人会吗 能帮助我吗?谢谢
DECLARE @xml as xml,@str as varchar(100),@delimiter as varchar(10)
SET @str='A,B,C,D,E'
SET @delimiter =','
SET @xml = cast(('<X>'+replace(@str,@delimiter ,'</X><X>')+'</X>') as xml)
SELECT N.value('.', 'varchar(10)') as value
FROM @xml.nodes('X') as T(N)
【问题讨论】:
所有受支持的 SQL Server 版本都支持STRING_SPLIT
。改用那个
他们只是别名。 T
用于“表”N
用于列。
as T(N)
指定结果是一个表T,列N
为什么需要指定列?
没有列的表格有什么好处,@Zoories?如果未定义,您如何引用该列?您正在在您的SELECT
中引用它。
【参考方案1】:
关于 XML nodes() 方法的 MSFT 文档可以找到here。
nodes方法的基本语法是:
nodes (XQuery) as Table(Column)
它将 xml 数据类型转换为关系数据,每行一个值。
正如 Panagiotis 已经指出的那样,有一条更快的路线。如果你使用的是兼容级别为 130 及更高的数据库,go 可以使用the STRING_SPLIT table-valued function。
DECLARE @str as varchar(100),@delimiter as varchar(10)
SET @str='A,B,C,D,E'
SET @delimiter =','
Select [value] FROM STRING_SPLIT(@str, @delimiter)
希望这可以为您澄清事情。
【讨论】:
以上是关于关于这个 TSQL/XQuery 分隔符分隔符的问题的主要内容,如果未能解决你的问题,请参考以下文章