作成中の MS SQL クエリがあり、特定のレコードがバージョン番号に基づいて「新しい」または「古い」カテゴリに分類されるかどうかを判断する必要があります。
「VersionNum」列があり、古いバージョンは 2.75.99.99 以下の任意のバージョン番号であり、新しいバージョンは 2.76.00.00 以降の任意のバージョン番号です。列のデータ型は varchar(20) です。
X.XX から文字列のサブセットを取得し、これを 10 進数としてキャストすることを考えていました。次に、すべてのバージョンが X.XX 10 進数にキャストされると、select 内の case ステートメントで > または < を実行することで、古いか新しいかを判別できます。
これは、バージョン番号がどこにあるかを決定するための正しい方法またはアイデアでしょうか? それとも何か他の方法がありますか。私が尋ねるのは、これに似たものが他の場所で必要になると想像するからであり、これは特別な状況ではありません.
編集: 1 つの追加の問題。X.XX.XX.XX (2.76.00.00) ではないバージョンもあれば、8.00.00 の形式のものもあり、「古い」バージョンと見なされます。これは、私がかつて考えていたよりもはるかにシステムを混乱させます。5 桁のバージョン (8.00.00) は常に古いと見なされるという情報を入手しました。したがって、5 桁の場合は常にバージョンが古いことになります。したがって、次のようなケースステートメントを実行すると考えています。
SELECT
Old = CASE WHEN LEN(VersionNum) < 10 THEN 1
WHEN CAST(SUBSTRING(VersionNum,1,4) AS DECIMAL(5,2)) < 1.52
AND LEN(VersionNum) >= 10 THEN 1
ELSE 0
END,
New = CASE WHEN CAST(SUBSTRING(VersionNum,1,4) AS DECIMAL(5,3)) >= 1.52
AND LEN(VersionNum) >= 10 THEN 1
ELSE 0
END
FROM
VersionTable
私の論理は正しいですか?それとも私は何かを逃していますか。長さの不平等は非常に厄介です。