字串值的相關函式 - 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。