= (字串比較或指派)
適用於:sql Server Azure SQL 資料庫 Azure SQL 受控執行個體 Microsoft Fabric 中Microsoft網狀架構倉儲中的 Azure Synapse Analytics Platform System (PDW) SQL 分析端點
比較 或 子句中的兩個 WHERE
字串, HAVING
或將變數或數據行設定為方程序右側字串作業的字串或結果。 例如,如果變數@x
等於 ,則會WHERE @x = 'Adventure'
比較的原始值@x
與字串值'Adventure'
'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 標準需要對比較中使用的字元字串進行填補,以便在比較字元字串之前符合其長度。 填補會直接影響 和 HAVING
子句述詞和其他 Transact-SQL 字串比較的WHERE
語意。 例如,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