适用范围:SQL Server
返回表示为字符串的$arg的值。
语法
fn:string() as xs:string
fn:string($arg as item()?) as xs:string
参数
$arg
节点或原子值。
注解
如果 $arg 为空序列,则返回零长度字符串。
如果 $arg 是节点,则函数将返回使用字符串值访问器获取的节点的字符串值。 W3C XQuery 1.0 和 XPath 2.0 数据模型规范中对此进行了定义。
如果 $arg 是原子值,则函数将返回由表达式强制转换
xs:string返回的字符串, $arg,除非另有说明。如果$arg
xs:anyURI的类型,则 URI 将转换为字符串而不转义特殊字符。在此实现中,
fn:string()没有参数只能用于依赖于上下文的谓词的上下文中。 具体而言,它只能在括号内使用([ ])。
示例
本文针对存储在 AdventureWorks 数据库中各种 xml 类型列中的 XML 实例提供了 XQuery 示例。
A. 使用字符串函数
以下查询检索 <Features> 元素的 <ProductDescription> 子元素节点。
SELECT CatalogDescription.query('
declare namespace PD="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelDescription";
/PD:ProductDescription/PD:Features
')
FROM Production.ProductModel
WHERE ProductModelID = 19;
下面是部分结果:
<PD:Features xmlns:PD="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelDescription">
These are the product highlights.
<p1:Warranty xmlns:p1="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelWarrAndMain">
<p1:WarrantyPeriod>3 years</p1:WarrantyPeriod>
<p1:Description>parts and labor</p1:Description>
</p1:Warranty>
...
</PD:Features>
如果指定 string() 函数,则会收到指定节点的字符串值。
SELECT CatalogDescription.query('
declare namespace PD="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelDescription";
string(/PD:ProductDescription[1]/PD:Features[1])
')
FROM Production.ProductModel
WHERE ProductModelID = 19;
下面是部分结果。
These are the product highlights.
3 yearsparts and labor...
B. 在各种节点上使用字符串函数
在下面的示例中,一个 XML 实例被分配给一个 xml 类型变量。 指定了查询来说明应用于 string() 各种节点的结果。
DECLARE @x AS XML;
SET @x = '<?xml version="1.0" encoding="UTF-8" ?>
<!-- This is a comment -->
<root>
<a>10</a>
just text
<b attr="x">20</b>
</root>
';
下面的查询检索文档节点的字符串值。 此值是通过串联所有后代文本节点的字符串值形成的。
SELECT @x.query('string(/)');
结果如下:
This is a comment 10
just text
20
下面的查询尝试检索处理指令节点的字符串值。 结果是一个空序列,因为它不包含文本节点。
SELECT @x.query('string(/processing-instruction()[1])');
下面的查询检索注释节点的字符串值并返回文本节点。
SELECT @x.query('string(/comment()[1])');
结果如下:
This is a comment