= (文字列の比較または代入)
適用対象: SQL Server Azure SQL Database Azure SQL Managed Instance Azure Synapse Analytics Analytics Platform System (PDW) Microsoft Fabric の SQL 分析エンドポイント Microsoft Fabric Warehouse Microsoft Fabric SQL Database
WHERE
句または HAVING
句の 2 つの文字列を比較するか、変数または列を式の右側の文字列演算の文字列または結果に設定します。 たとえば、変数 @x
が 'Adventure'
に等しい場合、WHERE @x = 'Adventure'
は @x
の元の値が文字列値 'Adventure'
とまったく同じであるかどうか比較します。 また、代入演算子として =
演算子を使用することもできます。 たとえば、SET @a = 'AdventureWorks'
を呼び出すことができます。
構文
expression = expression
引数
式 (expression)
文字型およびバイナリ型に分類される任意のデータ型を持つ有効な式を指定します。ただし、image、ntext、または text データ型は除きます。 両方の式は、同じデータ型でなければなりません。または、一方の式をもう一方の式のデータ型に暗黙的に変換できる必要があります。
バイナリ文字列の比較または代入や、バイナリ文字列間の任意の文字を比較または代入する場合、CONVERT
または CAST
による文字データへの明示的な変換を使用する必要があります。
解説
=
演算子を使用した文字列比較では、両方の文字列が同一であると見なされます。 部分的な文字列比較オプションについては、LIKE 演算子、または CONTAINS および CONTAINSTABLE フルテキスト述語を参照してください。
SQL Server データベース エンジンは、文字列とスペースを比較する方法に関する ANSI/ISO SQL-92 の規格 (セクション 8.2、"比較述語"、一般的な規則 #3) に従います。 ANSI 標準には、比較する前に長さが一致するように、比較で使用される文字列用の埋め込みが必要です。 パディングは、WHERE
および HAVING
句の述語のセマンティクスや他の Transact-SQL 文字列の比較に直接影響します。 たとえば、Transact-SQL では、文字列 'abc'
および 'abc '
が、ほとんどの比較演算で同等であると見なされます。 このルールの唯一の例外は LIKE 述語です。 LIKE
述語式の右側に末尾のスペースを含む値が含まれている場合、比較が行われる前に、データベース エンジンによって 2 つの値は同じ長さに埋め込まれません。 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