1

我想要一个存储为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 个单字节字段,但我真的不想手动编写代码(我无法编写循环,是吗?)。

4

1 回答 1

2

在 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 为基数)

于 2012-04-21T03:00:32.503 回答