关于这个 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 分隔符分隔符的问题的主要内容,如果未能解决你的问题,请参考以下文章

关于路径分隔符:正斜线/反斜线双反斜线\的区别

如何拆分()关于多个分隔符的字符串? [复制]

Listview 分隔符插入全宽

关于邮件合并结果保留千位分隔符的问题

错误 500:.htaccess RewriteCond:错误的标志分隔符

mysql 关于命令行下,字符串间少逗号分隔符的坑