[英]Compare two nvarchar columns with Unicode text in SQL server 2012
在MS SQL Server 2012中,我想比較數據類型為nvarchar的兩列,其中包含Unicode文本。
即使值不同,后續查詢也不會返回任何內容。
DECLARE @TABLE TABLE(
A nvarchar(100),
B nvarchar(100)
);
INSERT INTO @TABLE VALUES (N'A²', N'A2')
SELECT *
FROM @TABLE
WHERE A <> B;
我嘗試使用二進制排序規則,它的工作原理是:
DECLARE @TABLE TABLE(
A nvarchar(100),
B nvarchar(100)
);
INSERT INTO @TABLE VALUES (N'A²', N'A2');
SELECT *
FROM @TABLE
WHERE A COLLATE Latin1_General_BIN = B COLLATE Latin1_General_BIN;
還有其他選擇嗎?或者只能通過排序來完成?
還有其他選擇嗎?或者只能通過排序來完成?
是的,例如HASHBYTES
:
DECLARE @TABLE TABLE(A nvarchar(100),B nvarchar(100));
INSERT INTO @TABLE VALUES (N'A²', N'A2')
SELECT *
FROM @TABLE
WHERE HASHBYTES('SHA2_256',A) <> HASHBYTES('SHA2_256',B);
輸出:
╔════╦════╗
║ A ║ B ║
╠════╬════╣
║ A² ║ A2 ║
╚════╩════╝
無論如何,整理解決方案是最干凈的解決方案。
另一個選擇是:
SELECT
*
FROM
@TABLE
WHERE
CAST(A AS VARBINARY(MAX))<>CAST(B AS VARBINARY(MAX));
在表中打印出一行
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.