Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Platí pro: SQL Server 2025 (17.x)
Azure SQL Database Azure SQL
Managed Instance
SQL Database v Microsoft Fabric
Operátor || kanálů ve výrazu řetězce zřetězí dva nebo více znaků nebo binárních řetězců, sloupců nebo kombinace řetězců a názvů sloupců do jednoho výrazu (řetězcový operátor). Například SELECT 'SQL ' || 'Server'; vrátí SQL Server. Operátor || se řídí standardem ANSI SQL pro zřetězení řetězců. Na SQL Serveru můžete také provést zřetězení řetězců pomocí operátoru + a funkce CONCAT().
Syntax
expression || expression
Arguments
expression
Libovolný platný
Návratové typy
Vrátí datový typ argumentu s nejvyšší prioritou. Další informace naleznete v tématu Priorita datového typu.
Remarks
Mezi výhody použití syntaxe zřetězení řetězců ANSI patří:
Přenositelnost: Použití standardního operátoru
||ANSI pro zřetězení řetězců zajišťuje přenos kódu SQL napříč různými databázovými systémy. To znamená, že můžete beze změny spouštět stejné dotazy SQL na různých databázových platformách.Konzistence: Dodržování standardu ANSI podporuje konzistenci v kódu SQL, což usnadňuje čtení a údržbu, zejména při práci v prostředích s více databázovými systémy.
Interoperabilita: Standard ANSI je široce rozpoznán a podporován většinou databázových systémů kompatibilních s SQL, což zvyšuje interoperabilitu mezi různými systémy a nástroji.
Operátor || zřetězení řetězců je k dispozici ve službě Azure SQL Managed Instance se zásadami aktualizaceSQL Serveru 2025 nebo Always-up-to-date.
Chování zkrácení řetězce
Pokud výsledek zřetězení řetězců překročí limit 8 000 bajtů, výsledek se zkrátí. Pokud je ale alespoň jeden z řetězců zřetězený velký typ hodnoty, nedojde ke zkrácení.
Řetězce a znaky nulové délky
Operátor || (zřetězení řetězců) se chová odlišně, když pracuje s prázdným řetězcem nulové délky, než když pracuje s NULLnebo neznámými hodnotami. Řetězec znaku nulové délky lze zadat jako dvě jednoduché uvozovky bez jakýchkoli znaků uvnitř uvozovek. Binární řetězec nulové délky lze zadat jako 0x bez jakýchkoli hodnot bajtů zadaných v šestnáctkové konstantě. Zřetězení řetězce nulové délky vždy zřetězí dva zadané řetězce.
Zřetězení hodnot NULL
Stejně jako u aritmetických operací, které se provádějí s NULL hodnotami, při přidání NULL hodnoty ke známé hodnotě je výsledkem obvykle NULL hodnota. Operace zřetězení řetězců provedená s hodnotou NULL by měla také vytvořit NULL výsledek.
Operátor || neresektuje možnost SET CONCAT_NULL_YIELDS_NULL a vždy se chová, jako by bylo povolené chování ANSI SQL, a poskytuje NULL, pokud je některý ze vstupů NULL. Toto je hlavní rozdíl v chování mezi operátory + a || zřetězení. Další informace naleznete v tématu SET CONCAT_NULL_YIELDS_NULL.
Použití funkce CAST a CONVERT v případě potřeby
Explicitní převod na data znaků se musí použít při zřetězení binárních řetězců a všech znaků mezi binárními řetězci.
Následující příklady ukazují, kdy CONVERTnebo CASTje nutné použít s binární zřetězením a při CONVERTnebo CASTnení nutné použít.
V tomto příkladu není vyžadována žádná CONVERT ani CAST funkce, protože tento příklad zřetězí dva binární řetězce.
DECLARE @mybin1 VARBINARY(5), @mybin2 VARBINARY(5);
SET @mybin1 = 0xFF;
SET @mybin2 = 0xA5;
-- No CONVERT or CAST function is required because this example
-- concatenates two binary strings.
SELECT @mybin1 || @mybin2
V tomto příkladu se vyžaduje CONVERT nebo CAST funkce, protože tento příklad zřetězí dva binární řetězce a mezeru.
DECLARE @mybin1 VARBINARY(5), @mybin2 VARBINARY(5);
SET @mybin1 = 0xFF;
SET @mybin2 = 0xA5;
-- A CONVERT or CAST function is required because this example
-- concatenates two binary strings plus a space.
SELECT CONVERT(VARCHAR(5), @mybin1) || ' '
|| CONVERT(VARCHAR(5), @mybin2);
-- Here is the same conversion using CAST.
SELECT CAST(@mybin1 AS VARCHAR(5)) || ' '
|| CAST(@mybin2 AS VARCHAR(5));
Examples
Ukázky kódu v tomto článku používají ukázkovou databázi AdventureWorks2025 nebo AdventureWorksDW2025, kterou si můžete stáhnout z domovské stránky Microsoft SQL Serveru pro ukázky a komunitní projekty .
A. Použití zřetězení řetězců
Následující příklad vytvoří jeden sloupec pod záhlavím sloupce Name z více sloupců znaků, se jménem rodiny (LastName) osoby následovanou čárkou, jednou mezerou a potom křestním jménem (FirstName) osoby. Sada výsledků je ve vzestupném, abecedním pořadí podle jména rodiny a potom podle jména.
SELECT (LastName || ', ' || FirstName) AS Name
FROM Person.Person
ORDER BY LastName ASC, FirstName ASC;
B. Kombinování číselných a datových typů kalendářních dat
Následující příklad používá funkci CONVERT ke zřetězení číselných a datových typů kalendářních dat.
SELECT 'The order is due on ' || CONVERT(VARCHAR(12), DueDate, 101)
FROM Sales.SalesOrderHeader
WHERE SalesOrderID = 50001;
GO
Tady je sada výsledků.
------------------------------------------------
The order is due on 04/23/2007
C. Použití více zřetězení řetězců
Následující příklad zřetězí více řetězců, aby se vytvořil jeden dlouhý řetězec, aby se zobrazilo jméno rodiny a první iniciála viceprezidentů v Adventure Works Cycles. Za jméno rodiny se přidá čárka a tečka za prvním iniciálem.
SELECT (LastName || ',' + SPACE(1) || SUBSTRING(FirstName, 1, 1) || '.') AS Name, e.JobTitle
FROM Person.Person AS p
JOIN HumanResources.Employee AS e
ON p.BusinessEntityID = e.BusinessEntityID
WHERE e.JobTitle LIKE 'Vice%'
ORDER BY LastName ASC;
GO
Tady je sada výsledků.
Name Title
------------- ---------------`
Duffy, T. Vice President of Engineering
Hamilton, J. Vice President of Production
Welcker, B. Vice President of Sales
D. Použití velkých řetězců v zřetězení
Následující příklad zřetězí více řetězců, aby vytvořil jeden dlouhý řetězec, a pak se pokusí vypočítat délku konečného řetězce. Konečná délka sady výsledků je 16 000, protože vyhodnocení výrazu začíná zleva, tj. @x + @z + @y => (@x + @z) + @y. V tomto případě se výsledek (@x + @z) zkrátí na 8 000 bajtů a pak se @y přidá do sady výsledků, což zkrátí konečnou délku řetězce 16 000. Vzhledem k tomu, že @y je řetězec typu velká hodnota, nedojde ke zkrácení.
DECLARE @x VARCHAR(8000) = REPLICATE('x', 8000);
DECLARE @y VARCHAR(MAX) = REPLICATE('y', 8000);
DECLARE @z VARCHAR(8000) = REPLICATE('z', 8000);
SET @y = @x || @z || @y;
-- The result of following select is 16000
SELECT LEN(@y) AS y;
GO
Tady je sada výsledků.
y
-------
16000
Související obsah
- ||= (složené přiřazení) (Transact-SQL)
- + (zřetězení řetězců) (Transact-SQL)
- CONCAT (Transact-SQL)
- += (přiřazení zřetězení řetězců) (Transact-SQL)
- ALTER DATABASE (Transact-SQL)
-
CAST a CONVERT (Transact-SQL) - převodu datových typů (databázový stroj)
- datové typy (Transact-SQL)
- Výrazy (Transact-SQL)
- Jaké jsou funkce databáze SQL?
- Operátory (Transact-SQL)
- SELECT (Transact-SQL)
- příkazy
SET (Transact-SQL)