私は作成しているMS SQLクエリを持っており、特定のレコードがバージョン番号に基づいて「新規」または「古い」カテゴリに該当するかどうかを判断する必要があります。演算子とバージョンより大きいまたは小さい
「VersionNum」という列があり、古いバージョンは2.75.99.99以降のバージョン番号ですが、新しいバージョンは2.76.00.00以降のバージョン番号です。列のデータ型はvarchar(20)です。
私は文字列のサブセットをX.XXから取り出し、これを10進数としてキャストすることを考えていました。そして、すべてのバージョンがX.XX小数点にキャストされると、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
私のロジックは正しいですか?あるいは私は何かを逃している。長さの不平等は非常に迷惑です。
バージョン番号を4バイト列に分割するオプションがありますか?それをキャストしようとするならば、Int32は十分に大きくなければなりません。 – Paparazzi