共用方式為


字串值的相關函式 - concat

適用於:SQL Server

接受零個或多個字串做為引數,並傳回串連每個引數值所建立的字串。

語法

  
fn:concat ($string as xs:string?  
           ,$string as xs:string?  
           [, ...]) as xs:string  

引數

$string
要串連的選擇性字串。

備註

函式至少需要兩個引數。 如果引數是空序列,則會將其視為長度為零的字串。

補充字元 (Surrogate 字組)

XQuery 函式中 Surrogate 配對的行為取決於資料庫相容性層級,在某些情況下,則取決於函式的預設命名空間 URI。 如需詳細資訊,請參閱 SQL Server 2016 中資料庫引擎功能的重大變更主題 中的一節。 另請參閱 ALTER DATABASE 相容性層級 (Transact-SQL) 定序和 Unicode 支援

範例

本主題針對 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。

另請參閱

針對 xml 資料類型的 XQuery 函式