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
Azure SQL Database
Spravovaná instance Azure SQL
Azure Synapse Analytics
Analytics Platform System (PDW)
Koncový bod analýzy SQL v Microsoft Fabric
Sklad v Microsoft Fabric
Databáze SQL v Microsoft Fabric
Porovná dva řetězce v WHERE klauzuli nebo HAVING klauzuli nebo nastaví proměnnou nebo sloupec na řetězec nebo výsledek řetězcové operace na pravé straně rovnice. Pokud se například proměnná @x rovná 'Adventure', porovná WHERE @x = 'Adventure' původní hodnotu @x s řetězcovou hodnotou 'Adventure' přesně. Operátor můžete také použít = jako operátor přiřazení. Můžete například zavolat SET @a = 'AdventureWorks'.
Syntax
expression = expression
Arguments
expression
Určuje libovolný platný výraz libovolného z datových typů v kategorii znaku a binárního datového typu s výjimkou obrázku, ntextu nebo textových datových typů. Oba výrazy musí být stejného datového typu nebo jeden výraz musí být schopen implicitně převést na datový typ druhého výrazu.
Explicitní převod na znaková data s CONVERTnebo CAST musí být použit při porovnávání nebo přiřazování binárních řetězců a všech znaků mezi binárními řetězci.
Remarks
Porovnání řetězců pomocí operátoru = předpokládá, že oba řetězce jsou identické. U částečných možností porovnání řetězců se podívejte na operátor LIKE nebo predikáty FULLTEXT CONTAINS a CONTAINSTABLE .
Databázový stroj SQL Serveru se řídí specifikací ANSI/ISO SQL-92 (oddíl 8.2, predikát porovnání, obecná pravidla č. 3) o porovnání řetězců s mezerami. Standard ANSI vyžaduje odsazení pro řetězce znaků použité ve srovnáních, aby se jejich délky před porovnáním shodovaly. Odsazení přímo ovlivňuje sémantiku WHERE predikátů a HAVING dalších porovnání řetězců Transact-SQL. Například Transact-SQL považuje řetězce 'abc' za 'abc ' ekvivalentní pro většinu operací porovnání. Jedinou výjimkou tohoto pravidla je predikát LIKE. Pokud pravá strana LIKE predikátu výrazu obsahuje hodnotu s koncovým mezerou, databázový stroj nenasadí dvě hodnoty na stejnou délku před porovnáním. Vzhledem k tomu, že účelem LIKE predikátu je usnadnit hledání vzorů namísto jednoduchých testů rovnosti řetězců, tento predikát neporušuje oddíl specifikace ANSI SQL-92 zmíněné dříve.
Nastavení SET ANSI_PADDING nemá vliv na to, jestli databázový stroj před porovnáním řetězců.
SET ANSI_PADDING ovlivňuje pouze to, jestli se koncové prázdné hodnoty oříznou z hodnot, které se vkládají do tabulky, takže ovlivňují úložiště, ale ne porovnání.
Examples
A. Porovnání řetězců v klauzuli WHERE
SELECT LastName,
FirstName
FROM Person.Person
WHERE LastName = 'Johnson';
B. Porovnání řetězců v klauzuli WHERE pomocí převodu z binárního souboru
DECLARE @LNameBin BINARY (100) = 0x5A68656E67;
SELECT LastName,
FirstName
FROM Person.Person
WHERE LastName = CONVERT(VARCHAR, @LNameBin);
C. Přiřazení řetězce k proměnné
Tento příklad znázorňuje jednoduché přiřazení řetězcových dat k proměnné pomocí operátoru =.
DECLARE @dbname VARCHAR(100);
SET @dbname = 'Adventure';
D. Porovnání řetězců s mezerami
Následující dotazy ilustrují porovnání řetězců, ve kterých jedna strana obsahuje mezery a druhá:
CREATE TABLE #tmp (c1 VARCHAR(10));
GO
INSERT INTO #tmp VALUES ('abc ');
INSERT INTO #tmp VALUES ('abc');
GO
SELECT DATALENGTH(c1) AS 'EqualWithSpace', * FROM #tmp
WHERE c1 = 'abc ';
SELECT DATALENGTH(c1) AS 'EqualNoSpace ', * FROM #tmp
WHERE c1 = 'abc';
SELECT DATALENGTH(c1) AS 'GTWithSpace ', * FROM #tmp
WHERE c1 > 'ab ';
SELECT DATALENGTH(c1) AS 'GTNoSpace ', * FROM #tmp
WHERE c1 > 'ab';
SELECT DATALENGTH(c1) AS 'LTWithSpace ', * FROM #tmp
WHERE c1 < 'abd ';
SELECT DATALENGTH(c1) AS 'LTNoSpace ', * FROM #tmp
WHERE c1 < 'abd';
SELECT DATALENGTH(c1) AS 'LikeWithSpace ', * FROM #tmp
WHERE c1 LIKE 'abc %';
SELECT DATALENGTH(c1) AS 'LikeNoSpace ', * FROM #tmp
WHERE c1 LIKE 'abc%';
GO
DROP TABLE #tmp;
GO
Další kroky
- ANSI_PADDING SET (Transact-SQL)
- Řetězcové operátory (Transact-SQL)