= (문자열 비교 또는 할당)
적용 대상: Microsoft Fabric의 Microsoft Fabric Warehouse에 있는 SQL Server Azure SQL Database Azure SQL Managed Instance Azure Synapse Analytics Platform System(PDW) SQL 분석 엔드포인트
또는 절의 두 문자열을 WHERE
비교하거나 HAVING
변수 또는 열을 수식의 오른쪽에 있는 문자열 연산의 문자열 또는 결과로 설정합니다. 예를 들어 변수 @x
가 WHERE @x = 'Adventure'
'Adventure'
같으면 원래 값이 문자열 값 @x
'Adventure'
과 정확히 같은지 비교합니다. 또한 연산자를 =
대입 연산자로 사용할 수도 있습니다. 예를 들어 호출 SET @a = 'AdventureWorks'
할 수 있습니다.
구문
expression = expression
인수
expression
이미지, ntext 또는 텍스트 데이터 형식을 제외하고 문자 및 이진 데이터 형식 범주에 있는 데이터 형식 중 하나의 유효한 식을 지정합니다. 두 식이 모두 동일한 데이터 형식으로 되어 있거나 식 하나가 암시적으로 다른 식의 데이터 형식으로 변환될 수 있어야 합니다.
이진 문자열과 이진 문자열 간의 문자를 비교하거나 CAST
할당할 때 또는 문자 데이터로CONVERT
의 명시적 변환을 사용해야 합니다.
설명
연산자를 사용한 문자열 비교에서는 =
두 문자열이 모두 동일하다고 가정합니다. 부분 문자열 비교 옵션은 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
는 후행 공백이 테이블에 삽입되는 값에서 잘릴지 여부에만 영향을 주므로 스토리지에 영향을 주지만 비교에는 영향을 미치지 않습니다.
예제
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