Ескертпе
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Жүйеге кіруді немесе каталогтарды өзгертуді байқап көруге болады.
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Каталогтарды өзгертуді байқап көруге болады.
Применимо к: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