簡體   English   中英

在SQL Server 2012中將兩個nvarchar列與Unicode文本進行比較

[英]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);

LiveDemo

輸出:

╔════╦════╗
║ 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM