Заметка
Доступ к этой странице требует авторизации. Вы можете попробовать войти в систему или изменить каталог.
Доступ к этой странице требует авторизации. Вы можете попробовать сменить директорию.
Применимо к:SQL Server
База данных Azure SQL
Управляемый экземпляр Azure SQL
Azure Synapse Analytics
Система платформы аналитики (PDW)
Конечная точка SQL аналитики в Microsoft Fabric
Хранилище в Microsoft Fabric
База данных SQL в Microsoft Fabric
Сравнивает две строки в WHERE предложении или HAVING предложении или задает переменную или столбец строковой операции в правой части уравнения. Например, если переменная равна, сравнивает исходное значение @x точно с строковым значением'Adventure'.WHERE @x = 'Adventure'@x'Adventure' Кроме того, оператор можно использовать = в качестве оператора назначения. Например, можно вызвать SET @a = 'AdventureWorks'.
Syntax
expression = expression
Arguments
expression
Указывает любое допустимое выражение любого из типов данных в категории символьного и двоичного типа данных, кроме типов изображений, ntext или текстовых данных. Оба выражения должны иметь одинаковый тип данных, или одно из выражений должно допускать неявное преобразование к типу данных другого выражения.
Явное преобразование в символьные данные с CONVERTCAST или должно использоваться при сравнении или назначении двоичных строк и любых символов между двоичными строками.
Remarks
Сравнение строк с помощью = оператора предполагает, что обе строки идентичны. Для параметров частичного сравнения строк см. оператор 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 влияет только на то, обрезаются ли конечные пустые значения из вставленных значений в таблицу, поэтому это влияет на хранилище, но не на сравнения.
Examples
A. Сравнение строк в предложении 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