3

ID とロケールのテーブルがあります。異なるロケールで同じ ID を複数回リストすることができます。

ID      Locale
123456  EN_US
234567  EN_US
234567  EN_CA
345678  EN_US

元のコンポーネントをリバース エンジニアリングする機能を維持しながら、各レコードの数値 ID (整数) の形式で一意の識別子を作成する必要があります。

ビットシフトが機能する可能性があると考えていました。各ロケールに数値を割り当てますが、実装方法がよくわかりません。誰かが以前にこの課題に直面したことがありますか? また、私は 75 のロケールを持っているので、それがビット シフトの問題になるかどうかはわかりません。

最後に、Teradata (データ ソース) へのリンク サーバー接続で SQL Server を使用しています。Teradata はすぐに使えるビット単位をサポートしているとは思わないので、MSSQL でそれを行う必要があると思います。

ありがとうございました。

4

2 に答える 2

3

複合数値キーを作成して、75 個の一意の値を数値キーの最後の 2 桁にマッピングできます。単純なモジュラス 100 演算または部分文字列のみを使用して、コンポーネントに解析できます。値が 100 を超える場合は、代わりに 3 桁を使用してください。合計 9 桁が int に収まり、10 ~ 18 は bigint に収まります。

于 2013-09-10T17:15:31.853 に答える
0

234567-EN_US を整数に変換するのは簡単です。連結された文字列値に対して CHECKSUM を使用するだけです。ただし、元に戻すことはできません。

ただし、この CHECKSUM 値を元のテーブルに格納し、それを使用して、整数を格納するテーブルからバックトラックすることができます。

別の解決策は、各ロケールに整数値を割り当てることです (Marc B が提案したように)。それを X と呼びます。次に、既存の整数 ID (234567) を Y と呼びます。最終的なキーは (X * 1,000,000) + Y になります。式を逆にして値を取得できます。もちろん、これは、既存の整数 ID が 1,000,000 をはるかに下回り、最終的な整数が BigInt になる可能性がある場合にのみ機能します。

于 2013-09-10T17:25:29.520 に答える