共用方式為


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