Delen via


= (stringvergelijking of toewijzing)

Van toepassing op:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)SQL Analytics-eindpunt in Microsoft FabricMagazijn in Microsoft FabricSQL-database in Microsoft Fabric Preview

Vergelijkt twee tekenreeksen in een WHERE of component of HAVING stelt een variabele of kolom in op een tekenreeks of resultaat van een tekenreeksbewerking aan de rechterkant van de vergelijking. Als een variabele @x bijvoorbeeld gelijk is 'Adventure'aan, wordt de WHERE @x = 'Adventure' oorspronkelijke waarde @x exact vergeleken met de tekenreekswaarde 'Adventure' . U kunt de = operator ook gebruiken als toewijzingsoperator. U kunt bijvoorbeeld bellen SET @a = 'AdventureWorks'.

Syntax

expression = expression

Arguments

expression

Hiermee geeft u een geldige expressie van een van de gegevenstypen in de categorie voor tekens en binair gegevenstype, met uitzondering van de afbeelding, ntekst of tekstgegevenstypen . Beide expressies moeten van hetzelfde gegevenstype zijn of één expressie moet impliciet kunnen worden geconverteerd naar het gegevenstype van de andere expressie.

Een expliciete conversie naar tekengegevens met CONVERT, of CAST moet worden gebruikt bij het vergelijken of toewijzen van binaire tekenreeksen en tekens tussen de binaire tekenreeksen.

Remarks

Bij het vergelijken van tekenreeksen met behulp van de = operator wordt ervan uitgegaan dat beide tekenreeksen identiek zijn. Raadpleeg voor gedeeltelijke tekenreeksvergelijkingsopties de operator LIKE of de predicaten CONTAINS en CONTAINSTABLE voor volledige tekst.

De SQL Server Database Engine volgt de ANSI/ISO SQL-92-specificatie (sectie 8.2, vergelijkingspredicaat, algemene regels #3) over het vergelijken van tekenreeksen met spaties. De ANSI-standaard vereist opvulling voor de tekenreeksen die in vergelijkingen worden gebruikt, zodat de lengten overeenkomen voordat ze worden vergeleken. De opvulling is rechtstreeks van invloed op de semantiek van WHERE en HAVING componentpredicaten en andere Transact-SQL tekenreeksvergelijkingen. Transact-SQL beschouwt de tekenreeksen bijvoorbeeld als 'abc ' gelijkwaardig voor de meeste vergelijkingsbewerkingen'abc'. De enige uitzondering op deze regel is het PREdicaat LIKE. Wanneer aan de rechterkant van een LIKE predicaatexpressie een waarde met een volgruimte wordt weergegeven, worden de twee waarden niet opgevuld met dezelfde lengte voordat de vergelijking plaatsvindt. Omdat het doel van het LIKE predicaat per definitie is om patroonzoekopdrachten te vergemakkelijken in plaats van eenvoudige gelijkheidstests voor tekenreeksen, schendt dit predicaat de sectie van de EERDER genoemde ANSI SQL-92-specificatie niet.

De SET ANSI_PADDING instelling heeft geen invloed op het feit of de database-engine tekenreeksen aanvult voordat deze worden vergeleken. SET ANSI_PADDING is alleen van invloed op het feit of volgspaties worden afgekapt van waarden die in een tabel worden ingevoegd, zodat dit van invloed is op de opslag, maar niet op vergelijkingen.

Examples

A. Tekenreeksen vergelijken in een WHERE-component

SELECT LastName,
    FirstName
FROM Person.Person
WHERE LastName = 'Johnson';

B. Tekenreeksen in een WHERE-component vergelijken met behulp van conversie van binair

DECLARE @LNameBin BINARY (100) = 0x5A68656E67;

SELECT LastName,
    FirstName
FROM Person.Person
WHERE LastName = CONVERT(VARCHAR, @LNameBin);

C. Tekenreekstoewijzing aan een variabele

In dit voorbeeld ziet u een eenvoudige toewijzing van tekenreeksgegevens aan een variabele met behulp van de operator =.

DECLARE @dbname VARCHAR(100);

SET @dbname = 'Adventure';

D. Tekenreeksvergelijking met spaties

De volgende query's illustreren de vergelijking tussen tekenreeksen waarbij de ene zijde spaties bevat en de andere niet:

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

Next steps