= (Comparação ou atribuição de cadeia de caracteres)
Aplica-se a: SQL Server Banco de Dados SQL do Azure Instância Gerenciada de SQL do Azure Azure Synapse Analytics PDW (Analytics Platform System) Ponto de extremidade de análise de SQL no Microsoft Fabric Warehouse no Microsoft Fabric
Compara duas cadeias de caracteres em uma cláusula WHERE
ou HAVING
, ou define uma variável ou coluna como cadeia de caracteres ou resultado de uma operação de cadeia de caracteres no lado direito da equação. Por exemplo, se uma variável @x
for igual a 'Adventure'
, o WHERE @x = 'Adventure'
compara se o valor original de @x
será exatamente igual ao valor da cadeia de caracteres 'Adventure'
. Além disso, você pode usar o =
como um operador de atribuição. Por exemplo, você pode chamar SET @a = 'AdventureWorks'
.
Sintaxe
expression = expression
Argumentos
expressão
Especifica qualquer expressão válida de um dos tipos de dados na categoria de tipo de dados de caractere e binários, exceto os tipos de dados image, ntext ou text. As duas expressões devem ser do mesmo tipo de dados ou uma expressão deve poder ser convertida implicitamente no tipo de dados da outra expressão.
Uma conversão explícita para dados de caractere com CONVERT
ou CAST
deve ser usada ao comparar ou atribuir cadeias de caracteres binárias e quaisquer caracteres entre as strings binárias.
Comentários
A comparação de cadeia de caracteres usando o operador =
pressupõe que ambas as cadeias de caracteres sejam idênticas. Para obter opções parciais de comparação de cadeia de caracteres, confira o operador LIKE ou os predicados de texto completo CONTAINS e CONTAINSTABLE.
O Mecanismo de Banco de Dados do SQL Server segue a especificação ANSI/ISO SQL-92 (Seção 8.2, Predicado de comparação, Regras gerais nº 3) sobre como comparar cadeias de caracteres com espaços. O padrão ANSI requer preenchimento das cadeias de caracteres usadas em comparações para que seus comprimentos sejam correspondentes antes de compará-los. O preenchimento afeta diretamente a semântica dos predicados da cláusula WHERE
e HAVING
e outras comparações de cadeia de caracteres Transact-SQL. Por exemplo, o Transact-SQL considera as cadeias de caracteres 'abc'
e 'abc '
equivalentes para a maioria das operações de comparação. A única exceção a essa regra é o predicado LIKE. Quando o lado direito de uma expressão de predicado LIKE
apresenta um valor com um espaço à direita, o Mecanismo de Banco de Dados não preenche os dois valores com o mesmo comprimento antes que a comparação ocorra. Como a finalidade do predicado LIKE
, por definição, é facilitar pesquisas de padrões em vez de testes simples de igualdade de cadeia de caracteres. Esse predicado não viola a seção da especificação ANSI SQL-92 mencionada anteriormente.
A configuração SET ANSI_PADDING
não afeta a possibilidade de o Mecanismo de Banco de Dados preencher cadeias de caracteres antes de compará-las. SET ANSI_PADDING
afeta apenas a possibilidade de os espaços em branco à direita serem cortados dos valores que estão sendo inseridos em uma tabela. Portanto, afeta o armazenamento, mas não as comparações.
Exemplos
a. Comparar cadeias de caracteres em uma cláusula WHERE
SELECT LastName,
FirstName
FROM Person.Person
WHERE LastName = 'Johnson';
B. Comparar cadeias de caracteres em uma cláusula WHERE usando a conversão por meio de binário
DECLARE @LNameBin BINARY (100) = 0x5A68656E67;
SELECT LastName,
FirstName
FROM Person.Person
WHERE LastName = CONVERT(VARCHAR, @LNameBin);
C. Atribuição de cadeia de caracteres a uma variável
Este exemplo ilustra uma atribuição simples de dados de cadeia de caracteres a uma variável usando o operador =.
DECLARE @dbname VARCHAR(100);
SET @dbname = 'Adventure';
D. Comparação de cadeias de caracteres com espaços
As consultas a seguir ilustram a comparação entre cadeias de caracteres em que um lado contém espaços e o outro não:
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