构造函数 (XQuery)
适用于:SQL Server
从指定的输入中,构造函数创建任意 XSD 内置或用户定义原子类型的实例。
语法
TYP($atomicvalue as xdt:anyAtomicType?
) as TYP?
自变量
$strval
将被转换的字符串。
TYP
任意内置 XSD 类型。
备注
支持用于基本和派生原子 XSD 类型的构造函数。 但是,不支持 xs:duration 的子类型,其中包括 xdt:yearMonthDuration 和 xdt:dayTimeDuration,以及 xs:QName、 xs:NMTOKEN 和 xs:NOTATION 。 倘若它们是直接或间接从以下类型中派生的,则相关联的架构集合中提供的用户定义原子类型也可用。
支持的基类型
以下是所支持的基类型:
xs:string
xs:boolean
xs:decimal
xs:float
xs:double
xs:duration
xs:dateTime
xs:time
xs:date
xs:gYearMonth
xs:gYear
xs:gMonthDay
xs:gDay
xs:gMonth
xs:hexBinary
xs:base64Binary
xs:anyURI
支持的派生类型
以下是所支持的派生类型:
xs:normalizedString
xs:token
xs:language
xs:Name
xs:NCName
xs:ID
xs:IDREF
xs:ENTITY
xs:integer
xs:nonPositiveInteger
xs:negativeInteger
xs:long
xs:int
xs:short
xs:byte
xs:nonNegativeInteger
xs:unsignedLong
xs:unsignedInt
xs:unsignedShort
xs:unsignedByte
xs:positiveInteger
SQL Server 也以以下方式支持构造函数调用的常量折叠:
如果参数为字符串文字,则将在编译期间计算表达式。 当该值不满足类型约束时,将生成静态错误。
如果参数为其他类型的文字,将在编译期间计算表达式。 当该值不满足类型约束时,将返回空序列。
示例
本主题针对存储在 AdventureWorks 数据库中各种 xml 类型列中的 XML 实例提供 XQuery 示例。
A. 使用 dateTime() XQuery 函数检索以前的产品说明
在此示例中,首先将示例 XML 文档分配给 xml 类型变量。 本文档包含三个示例 <ProductDescription
> 元素,每个示例元素都包含一个 <DateCreated
> 子元素。
然后,查询该变量以便仅检索在特定日期之前创建的那些产品说明。 为了进行比较,查询使用 xs:dateTime () 构造函数来键入日期。
declare @x xml
set @x = '<root>
<ProductDescription ProductID="1" >
<DateCreated DateValue="2000-01-01T00:00:00Z" />
<Summary>Some Summary description</Summary>
</ProductDescription>
<ProductDescription ProductID="2" >
<DateCreated DateValue="2001-01-01T00:00:00Z" />
<Summary>Some Summary description</Summary>
</ProductDescription>
<ProductDescription ProductID="3" >
<DateCreated DateValue="2002-01-01T00:00:00Z" />
<Summary>Some Summary description</Summary>
</ProductDescription>
</root>'
select @x.query('
for $PD in /root/ProductDescription
where xs:dateTime(data( ($PD/DateCreated/@DateValue)[1] )) < xs:dateTime("2001-01-01T00:00:00Z")
return
element Product
{
( attribute ProductID { data($PD/@ProductID ) },
attribute DateCreated { data( ($PD/DateCreated/@DateValue)[1] ) } )
}
')
请注意上述查询的以下方面:
FOR...WHERE 循环结构用于检索 <满足 WHERE 子句中指定的条件的 ProductDescription> 元素。
dateTime () 构造函数用于构造 dateTime 类型值,以便可以适当地比较它们。
然后,该查询将构造得到的 XML。 由于构造一系列属性,因此在 XML 构造中要使用逗号和括号。
结果如下:
<Product
ProductID="1"
DateCreated="2000-01-01T00:00:00Z"/>