Поделиться через


= (сравнение строк или назначение)

Область применения: SQL Server База данных SQL Azure Управляемый экземпляр SQL Azure конечной точке аналитики платформы Аналитики Azure Synapse Analytics (PDW) в Microsoft Fabric Хранилище в Microsoft Fabric

Сравнивает две строки в WHERE предложении или HAVING предложении или задает переменную или столбец строковой операции в правой части уравнения. Например, если переменная равна, сравнивает исходное значение @x точно с строковым значением'Adventure'.WHERE @x = 'Adventure' 'Adventure'@x Кроме того, оператор можно использовать = в качестве оператора назначения. Например, можно вызвать SET @a = 'AdventureWorks'.

Синтаксис

expression = expression

Аргументы

выражение

Указывает любое допустимое выражение любого из типов данных в категории символьного и двоичного типа данных, кроме типов изображений, ntext или текстовых данных. Оба выражения должны иметь одинаковый тип данных, или одно из выражений должно допускать неявное преобразование к типу данных другого выражения.

Явное преобразование в символьные данные с CONVERTCAST или должно использоваться при сравнении или назначении двоичных строк и любых символов между двоичными строками.

Замечания

Сравнение строк с помощью = оператора предполагает, что обе строки идентичны. Для параметров частичного сравнения строк см. оператор LIKE или предикаты CONTAINS и CONTAINSTABLE с полным текстом.

Ядро СУБД SQL Server следует спецификации ANSI/ISO SQL-92 (раздел 8.2, предикат сравнения, общие правила #3) по сравнению строк с пробелами. Стандарт ANSI требует заполнения для строк символов, используемых в сравнениях, чтобы их длина соответствовала перед сравнением. Заполнение непосредственно влияет на семантику WHERE предикатов и HAVING предложений и другие сравнения строк Transact-SQL. Например, Transact-SQL рассматривает строки 'abc' и 'abc ' эквивалентен для большинства операций сравнения. Единственным исключением из этого правила является предикат LIKE. Если справа от LIKE выражения предиката имеет значение с конечным пробелом, ядро СУБД не заполняет два значения одинаковой длиной до сравнения. Поскольку назначение LIKE предиката, по определению, заключается в том, чтобы упростить поиск шаблонов, а не простые тесты на равенство строк, этот предикат не нарушает раздел спецификации ANSI SQL-92, упоминаемой ранее.

Параметр SET ANSI_PADDING не влияет на то, будут ли строки ядро СУБД панели перед их сравнением. SET ANSI_PADDING влияет только на то, обрезаются ли конечные пустые значения из вставленных значений в таблицу, поэтому это влияет на хранилище, но не на сравнения.

Примеры

А. Сравнение строк в предложении WHERE

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

B. Сравнение строк в предложении WHERE с помощью преобразования из двоичного файла

DECLARE @LNameBin BINARY (100) = 0x5A68656E67;

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

C. Присвоение строк переменной

В этом примере показано простое назначение строковых данных переменной с помощью оператора =.

DECLARE @dbname VARCHAR(100);

SET @dbname = 'Adventure';

D. Сравнение строк с пробелами

В следующих запросах показано сравнение строк, в которых одна сторона содержит пробелы, а другая — нет:

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

Следующие шаги