私は3つの主キーをexに渡すことができるSQL Server機能を探しています。 @testID
バージョンが比較されている整数と複数の列がある@maxID
と@minID
バージョン値の間にある場合、結果は1(真)であると複数の重み付き列を比較するスカラー関数
functionFoo (@maxID, @minID, @testID)
。
@maxID
がNULLの場合は、@testID
の列が@minID
の列より大きいかどうかをチェックするなど、オープンエンドの比較を処理できるようにしたいと思います。または、@minID
がNULLの場合、@testID
列が@maxID
列より小さいかどうかをチェックします。
ソフトウェアのバージョンを比較するという、このような複雑な例を考えてみましょう。バージョン管理された複数のソフトウェアがあるとします。たとえば、バージョン1.6.6.978.73
のsoftware1があり、バージョン1.5.9.7
とバージョン1.6.7
の間にあるかどうかを判断するSQL Server関数が必要になったとします。私のテーブルは、
以下のソフトウェア表
Version1
列は常に
Version2
列(例えば、バージョン2.0 1.99999より高い)よりも高いが加重される
ID Version1 Version2 Version3 Version4 Version5
1 1 6 6 978 73
2 1 5 9 7 NULL
3 1 6 7 NULL NULL
ように設定されます。私は各列を調べて比較を行いましたが、結果があいまいであれば次の列に移動して比較をやり直しますが、読みづらいと思います。より良い/より簡単な方法がありますか? SQL Serverの組み込み関数が欠けていますか?アルファベット順でソートするのと非常によく似ています。再帰的な性質は、最初の比較が決定的な結果をもたらさない場合には、一層深く進むことです。
あなたは洗練されたソリューションを望んでいるようですが、バージョン番号のどれもが10^4のようなものを超えていなければ、 COLLESCE(バージョン5、0)* 10^4 + COALESCE(バージョン3、0)* 10^8 + COALESCE(バージョン2、0)* 10^12 + COALESCE(バージョン1、0)* 10^16比較を上回る/下回るようにする。 –
数字が約500を超えることはないので、私はこのような解決策を考えました。私はもっとクリーンな方法があることを望んでいました。なぜなら、いつかはその時点を超えて論理が壊れてしまったからです。 – Stormchao