在MS SQL Server 2012中,我想比较两个包含Unicode文本的数据类型为nvarchar的列。
以下查询返回任何内容,甚至认为值不同。
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;
还有其他选择,还是只能通过整理来完成?
答案 0 :(得分:1)
还有其他选择,还是只能通过整理来完成?
是的,例如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 ║
╚════╩════╝
无论如何,整理解决方案是最干净的解决方案。
答案 1 :(得分:1)
另一种选择是:
SELECT
*
FROM
@TABLE
WHERE
CAST(A AS VARBINARY(MAX))<>CAST(B AS VARBINARY(MAX));
打印出表格中的一行