我希望有一个存储为binary(64) (固定长度)的字段,然后我希望能够查询“最接近的匹配”。为此,我只想找出每个字节之间的绝对差异,然后求出差异的总和。
一个包含四个字节字符串的示例:
13 AF 83 52
- E9 B4 9C 19
-----------
D6 05 19 39
D6 + 05 + 19 + 39 = 12D = 301 base 10我使用的是实体框架,所以最好用Linq编写,但如果不可能,也可以使用raw-SQL。
我预计这不会很快,这就是为什么我计划首先使用另一个键来尽可能缩小结果的范围。这可以在Linq/SQL中实现吗?
否则,我认为我可以使用64个单字节字段,但我并不真的想手动编写代码(我不可能编写循环,对吧?)
发布于 2012-04-21 11:00:33
在这个4字节的例子中,可能是这样的:
DECLARE @b1 BINARY(4)=0x13+0xAF+0x83+0x52;
DECLARE @b2 BINARY(4)=0xE9+0xB4+0x9C+0x19;
SELECT ABS(CAST(SUBSTRING(@b1,1,1) AS INT)-CAST(SUBSTRING(@b2,1,1) AS INT))
+ ABS(CAST(SUBSTRING(@b1,2,1) AS INT)-CAST(SUBSTRING(@b2,2,1) AS INT))
+ ABS(CAST(SUBSTRING(@b1,3,1) AS INT)-CAST(SUBSTRING(@b2,3,1) AS INT))
+ ABS(CAST(SUBSTRING(@b1,4,1) AS INT)-CAST(SUBSTRING(@b2,4,1) AS INT))结果: 301 (以10为基数)
https://stackoverflow.com/questions/10255308
复制相似问题