Sdílet prostřednictvím


= (porovnání řetězců nebo přiřazení)

Platí pro:SQL ServerAzure SQL DatabaseSpravovaná instance Azure SQLAzure Synapse AnalyticsAnalytics Platform System (PDW)Koncový bod analýzy SQL v Microsoft FabricSklad v Microsoft FabricDatabá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