【问题标题】:question about this TSQL/XQuery delimiter splitter关于这个 TSQL/XQuery 分隔符分隔符的问题
【发布时间】: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 中引用它。

标签: sql xml tsql xquery


【解决方案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)

希望这可以为您澄清事情。

【讨论】:

    猜你喜欢
    • 2019-02-14
    • 1970-01-01
    • 2011-04-15
    相关资源
    最近更新 更多