2

次のような値を持つnvarchar型のフィールド「Category」を持つテーブルを持つSQL 2008データベースがあります。

A1
A10
A2
B1/1
B1/2
B1/3
D1(1)
D1(2)

これはデータにとって適切な構造ではないことはわかっていますが、ユーザーが開始カテゴリと終了カテゴリ (つまり、A1 から A15、または B1/1 から B/3) を入力できるように、検索をこのテーブルに絞り込む必要があります。これらのカテゴリ値を持つレコードのみを返す必要があります。

これを行う方法はありますか?もう 1 つのことは、結果を正しく並べ替えたいということです (つまり、A2 の後に A10)。

c.

4

1 に答える 1

0

WHERE 句を使用して、返される結果を絞り込むことができます。例えば:

SELECT  Col1
       ,Col2
       ...
       ,Coln
FROM SourceTable
WHERE Col1>'A1' AND Col1<'A15' 

この値 ('A1' および 'A15') をユーザー定義関数の入力パラメーターとして使用できます。そうすれば、'B1' と 'B15' またはそれらの代わりに他のすべてを渡すのが非常に簡単になります。

また、「A2」の後に「A10」を表示したい場合は

ユーザー定義関数の詳細について -ユーザー定義関数

T-SQL での文字列圧縮については、この情報を確認してください。また、衝突にも時間を費やす必要があります-大文字と小文字を区別する文字列と大文字と小文字を区別しない文字列を比較しています。

「もう1つは、結果を正しくソートしたいということです(つまり、A2の後のA10)」に関しては、次のように関数にロジックを追加できます。

DECLARE @ParamOne NVARCHAR(2)='A2'
DECLARE @ParamTwo NVARCHAR(3)='A10'

SELECT  CASE WHEN LEN(@ParamOne)=2
             THEN CASE WHEN @ParamTwo<STUFF(@ParamOne,2,0,'0')
                    THEN 1
             ELSE 2
             END
        ELSE
             CASE WHEN @ParamTwo<@ParamOne
                    THEN 1
             ELSE 2
             END
        END
于 2012-10-03T06:35:00.210 に答える