使用SQL server 2012中的Unicode文本比较两个nvarchar列
在MS SQL Server 2012中,我想比较两个数据类型为nvarchar的列,它们包含Unicode文本 即使值不同,下面的查询也不会返回任何结果使用SQL server 2012中的Unicode文本比较两个nvarchar列,sql,sql-server,tsql,sql-server-2012,collation,Sql,Sql Server,Tsql,Sql Server 2012,Collation,在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 <> B;
是否有其他选项,或者只能通过排序规则来完成
是否有其他选项,或者只能通过排序规则来完成
是的,例如:
无论如何,排序规则解决方案是最干净的解决方案。另一个选项是:
SELECT
*
FROM
@TABLE
WHERE
CAST(A AS VARBINARY(MAX))<>CAST(B AS VARBINARY(MAX));
选择
*
从…起
@桌子
哪里
CAST(A为VARBINARY(MAX))CAST(B为VARBINARY(MAX));
如果打印出表中的一行,则需要使用不同的排序规则,因为即使值A2和a^2的校验和也是相同的,排序规则也可以工作,比较也可以。你说我需要使用不同的排序规则是什么意思?
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));