1

(固定長)として格納されるフィールドが必要でbinary(64)あり、次に「最も近い一致」を照会できるようにしたい。そのためには、各バイト間の絶対差を見つけて、その差を合計したいと思います。

4バイト文字列の例:

  13 AF 83 52
- E9 B4 9C 19
  -----------
  D6 05 19 39

D6 + 05 + 19 + 39 = 12D = 301 base 10

私はentity-frameworkを使用しているので、できればこれを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 に答える