|| (Zřetězení řetězců) (Transact-SQL)
platí pro:databáze Azure SQL DatabaseAzure SQL Managed InstanceSQL 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
Argumenty
výrazu
Libovolný platný
Návratové typy
Vrátí datový typ argumentu s nejvyšší prioritou. Další informace naleznete v tématu Priorita datového typu.
Poznámky
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.
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 NULL
nebo 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 CONVERT
nebo CAST
je nutné použít s binární zřetězením a při CONVERT
nebo CAST
není 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));
Příklady
Ukázky kódu Transact-SQL v tomto článku používají AdventureWorks2022
nebo AdventureWorksDW2022
ukázkovou databázi, kterou si můžete stáhnout z domovské stránky ukázky Microsoft SQL Serveru a projekty komunity.
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)