我有以下代码
select
Name, UniqueId,
checksum(Name) as CheckName,
checksum(UniqueId) as CheckId
from
DataManagementPipeline.dbo.pod_1801_energex_vegetation_zones
where
Name <> UniqueId
结果如下
Name UniqueId CheckName CheckId
********************************************************
VZ-4820/73 VZ-4820/73 -1880307869 -21513965
VZ-400706 VZ-400706 591267130 536293334
值是相同的(空白和所有)但它们看起来是不同的,有趣的是校验和是不同的。这是一个编码问题,为什么他们是不同的?有什么想法吗?
答案 0 :(得分:2)
CHECKSUM
将返回不同的值。点击MSDN Checksum了解更多信息。我想在你的情况下,名称&amp; UniqueId 属于不同类型。请参阅下面的示例代码
CREATE TABLE test(origname varchar(36), uniqueid nvarchar(36))
INSERT INTO test(origname,uniqueid)
values ('venkat',N'venkat')
SELECT CHECKSUM(origname), CHECKSUM(uniqueid) FROM test
-- Returned Values
178987073 1792344567
答案 1 :(得分:0)
解开的谜团是,UniqueId末尾的间距是ASCII字符(10)而不是我认为的白色空间。因此,为什么他们的表现不平等。所以我添加了这段代码
ltrim(rtrim(Name)) <> rtrim(ltrim(REPLACE(REPLACE(UniqueId, CHAR(13), ''), CHAR(10), '')))
在记事本++中我以为我添加了ASCII(10)(换行)但显然没有。我会接受@Venkataraman R的答案,因为他是对的。谢谢你的帮助。