Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Gäller för:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
Analysplattformssystem (PDW)
SQL-analysslutpunkt i Microsoft Fabric
Lager i Microsoft Fabric
SQL-databas i Förhandsversion av Microsoft Fabric
Jämför två strängar i en WHERE eller HAVING -sats eller anger en variabel eller kolumn till sträng eller resultat av en strängåtgärd till höger i ekvationen. Om en variabel @x till exempel är WHERE @x = 'Adventure''Adventure'lika med jämförs det ursprungliga värdet för @x med strängvärdet 'Adventure' exakt. Du kan också använda operatorn = som tilldelningsoperator. Du kan till exempel anropa SET @a = 'AdventureWorks'.
Syntax
expression = expression
Arguments
expression
Anger ett giltigt uttryck för någon av datatyperna i kategorin tecken och binär datatyp, förutom datatyperna bild, ntext eller text . Båda uttrycken måste ha samma datatyp, eller så måste ett uttryck kunna konverteras implicit till datatypen för det andra uttrycket.
En explicit konvertering till teckendata med CONVERT, eller CAST måste användas när du jämför eller tilldelar binära strängar och eventuella tecken mellan de binära strängarna.
Remarks
Strängjämförelse med operatorn = förutsätter att båda strängarna är identiska. För alternativ för partiell strängjämförelse, se like-operatorn eller contains- och CONTAINSTABLE-predikaten för fulltext.
SQL Server Database Engine följer ANSI/ISO SQL-92-specifikationen (avsnitt 8.2, Jämförelsepredikat, Allmänna regler nr 3) om hur du jämför strängar med blanksteg. ANSI-standarden kräver utfyllnad för de teckensträngar som används i jämförelser så att deras längder matchar innan de jämförs. Utfyllnad påverkar direkt semantiken WHERE för och HAVING satspredikat och andra Transact-SQL strängjämförelser. Till exempel anser Transact-SQL att strängarna 'abc' och 'abc ' är likvärdiga för de flesta jämförelseåtgärder. Det enda undantaget till den här regeln är LIKE-predikatet. När höger sida av ett LIKE predikatuttryck har ett värde med ett avslutande blanksteg, fyller databasmotorn inte de två värdena i samma längd innan jämförelsen sker. Eftersom syftet med predikatet LIKE per definition är att underlätta mönstersökningar snarare än enkla strängjämlikhetstester, bryter detta predikat inte mot avsnittet i ANSI SQL-92-specifikationen som nämndes tidigare.
Inställningen SET ANSI_PADDING påverkar inte om databasmotorn fyller på strängar innan den jämför dem.
SET ANSI_PADDING påverkar endast om avslutande tomma värden trimmas från värden som infogas i en tabell, så det påverkar lagring men inte jämförelser.
Examples
A. Jämför strängar i en WHERE-sats
SELECT LastName,
FirstName
FROM Person.Person
WHERE LastName = 'Johnson';
B. Jämför strängar i en WHERE-sats med konvertering från binär fil
DECLARE @LNameBin BINARY (100) = 0x5A68656E67;
SELECT LastName,
FirstName
FROM Person.Person
WHERE LastName = CONVERT(VARCHAR, @LNameBin);
C. Strängtilldelning till en variabel
Det här exemplet illustrerar en enkel tilldelning av strängdata till en variabel med operatorn = .
DECLARE @dbname VARCHAR(100);
SET @dbname = 'Adventure';
D. Strängjämförelse med blanksteg
Följande frågor illustrerar jämförelsen mellan strängar där den ena sidan innehåller blanksteg och den andra inte:
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