= (Perbandingan string atau penugasan)
Berlaku untuk: Titik akhir analitik SQL Server Azure SQL Database Azure SQL Managed Instance Azure Synapse Analytics Platform System (PDW) SQL di Microsoft Fabric Warehouse di Microsoft Fabric
Membandingkan dua string dalam WHERE
klausa atau HAVING
mengatur variabel atau kolom ke string atau hasil operasi string di sisi kanan persamaan. Misalnya, jika variabel @x
sama dengan 'Adventure'
, maka WHERE @x = 'Adventure'
membandingkan nilai @x
asli sama dengan nilai 'Adventure'
string dengan persis. Anda juga dapat menggunakan =
operator sebagai operator penugasan. Misalnya, Anda dapat memanggil SET @a = 'AdventureWorks'
.
Sintaks
expression = expression
Argumen
expression
Menentukan ekspresi yang valid dari salah satu jenis data dalam kategori jenis data karakter dan biner, kecuali jenis data gambar, ntext, atau teks. Kedua ekspresi harus memiliki jenis data yang sama, atau satu ekspresi harus dapat dikonversi secara implisit menjadi jenis data dari ekspresi lainnya.
Konversi eksplisit ke data karakter dengan CONVERT
, atau CAST
harus digunakan saat membandingkan atau menetapkan string biner dan karakter apa pun di antara string biner.
Keterangan
Perbandingan =
string menggunakan operator mengasumsikan bahwa kedua string identik. Untuk opsi perbandingan string parsial, lihat operator LIKE , atau predikat teks lengkap CONTAINS dan CONTAINSTABLE .
Mesin Database SQL Server mengikuti spesifikasi ANSI/ISO SQL-92 (Bagian 8.2, Predikat Perbandingan, Aturan umum #3) tentang cara membandingkan string dengan spasi. Standar ANSI memerlukan padding untuk string karakter yang digunakan dalam perbandingan sehingga panjangnya cocok sebelum membandingkannya. Padding secara langsung memengaruhi semantik predikat klausul WHERE
dan HAVING
dan perbandingan string Transact-SQL lainnya. Misalnya, Transact-SQL mempertimbangkan string 'abc'
dan 'abc '
setara untuk sebagian besar operasi perbandingan. Satu-satunya pengecualian untuk aturan ini adalah predikat LIKE. Saat sisi kanan ekspresi predikat menampilkan LIKE
nilai dengan spasi berikutnya, Mesin Database tidak mengalihkan dua nilai dengan panjang yang sama sebelum perbandingan terjadi. Karena tujuan LIKE
predikat, menurut definisi, adalah untuk memfasilitasi pencarian pola daripada pengujian kesetaraan string sederhana, predikat ini tidak melanggar bagian spesifikasi ANSI SQL-92 yang disebutkan sebelumnya.
Pengaturan SET ANSI_PADDING
tidak memengaruhi apakah database Engine pads strings sebelum membandingkannya. SET ANSI_PADDING
hanya memengaruhi apakah kosong berikutnya dipangkas dari nilai yang dimasukkan ke dalam tabel, sehingga memengaruhi penyimpanan tetapi bukan perbandingan.
Contoh
J. Membandingkan string dalam klausa WHERE
SELECT LastName,
FirstName
FROM Person.Person
WHERE LastName = 'Johnson';
B. Membandingkan string dalam klausul WHERE menggunakan konversi dari biner
DECLARE @LNameBin BINARY (100) = 0x5A68656E67;
SELECT LastName,
FirstName
FROM Person.Person
WHERE LastName = CONVERT(VARCHAR, @LNameBin);
C. Penetapan string ke variabel
Contoh ini mengilustrasikan penetapan sederhana data string ke variabel menggunakan operator = .
DECLARE @dbname VARCHAR(100);
SET @dbname = 'Adventure';
D. Perbandingan string dengan spasi
Kueri berikut mengilustrasikan perbandingan antara string di mana satu sisi berisi spasi dan yang lain tidak:
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