字串值的相關函式 - concat
適用於:SQL Server
接受零個或多個字串做為引數,並傳回串連每個引數值所建立的字串。
語法
fn:concat ($string as xs:string?
,$string as xs:string?
[, ...]) as xs:string
引數
$string
要串連的選擇性字串。
備註
函式至少需要兩個引數。 如果引數是空序列,則會將其視為長度為零的字串。
補充字元 (Surrogate 字組)
XQuery 函式中 Surrogate 配對的行為取決於資料庫相容性層級,在某些情況下,則取決於函式的預設命名空間 URI。 如需詳細資訊,請參閱 SQL Server 2016 中資料庫引擎功能的重大變更主題 中的
範例
本主題針對 AdventureWorks 範例資料庫中各種 xml 類型資料行中儲存的 XML 實例提供 XQuery 範例。
A. 使用 concat() XQuery 函式串連字號串
針對特定產品模型,此查詢會傳回串連保固期間和保固描述所建立的字串。 在目錄描述檔中,元素 <>Warranty
是由 和 Description
>< 子專案所 <WarrantyPeriod
> 組成。
WITH XMLNAMESPACES (
'https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelDescription' AS pd,
'https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelWarrAndMain' AS wm)
SELECT CatalogDescription.query('
<Product
ProductModelID= "{ (/pd:ProductDescription/@ProductModelID)[1] }"
ProductModelName = "{ sql:column("PD.Name") }" >
{
concat( string((/pd:ProductDescription/pd:Features/wm:Warranty/wm:WarrantyPeriod)[1]), "-",
string((/pd:ProductDescription/pd:Features/wm:Warranty/wm:Description)[1]))
}
</Product>
') as Result
FROM Production.ProductModel PD
WHERE PD.ProductModelID=28
請注意下列項目是從上一個查詢而來:
在 SELECT 子句中,CatalogDescription 是 xml 類型資料行。 因此, 會使用 query() 方法 (XML 資料類型) 、Instructions.query()。 XQuery 語句會指定為查詢方法的引數。
執行查詢的檔會使用命名空間。 因此, namespace 關鍵字可用來定義命名空間的前置詞。 如需詳細資訊,請參閱 XQuery Prolog 。
以下是結果:
<Product ProductModelID="28" ProductModelName="Road-450">1 year-parts and labor</Product>
先前的查詢會擷取特定產品的資訊。 下列查詢會針對儲存 XML 目錄描述的所有產品擷取相同的資訊。 WHERE 子句中 xml 資料類型的 exist() 方法會傳回 True,如果資料列中的 XML 檔有 元素 ProductDescription
<> 。
WITH XMLNAMESPACES (
'https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelDescription' AS pd,
'https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelWarrAndMain' AS wm)
SELECT CatalogDescription.query('
<Product
ProductModelID= "{ (/pd:ProductDescription/@ProductModelID)[1] }"
ProductName = "{ sql:column("PD.Name") }" >
{
concat( string((/pd:ProductDescription/pd:Features/wm:Warranty/wm:WarrantyPeriod)[1]), "-",
string((/pd:ProductDescription/pd:Features/wm:Warranty/wm:Description)[1]))
}
</Product>
') as Result
FROM Production.ProductModel PD
WHERE CatalogDescription.exist('//pd:ProductDescription ') = 1
請注意,xml 類型的 exist() 方法所 傳回的 布林值與 1 比較。
實作限制
以下是限制:
- SQL Server 中的 concat() 函式只接受 xs:string 類型的值。 其他值必須明確地轉換成 xs:string 或 xdt:untypedAtomic。