その列の値について列をクエリするにはどうすればよいですか? (つまり、値をフィルター処理できるかどうかを決定する動的where句を作成するにはどうすればよいですか。)
特定の値をクエリできるかどうか。たとえば、値を1にしたいが、任意の数値にしたい場合があります。
ワイルドカード(「*」など)を使用して任意の値に一致させる方法はありますか。これにより、フィルターが必要ない場所に動的に挿入できますか?
例えば:
select int_col from table where int_col = 1 // Query for a specific value
select int_col from table where int_col = * // Query for any value
2つの別個のSQLステートメントを使用したくない理由は、これをSQLデータソースとして使用しているためです。SQLデータソースは1つのselectステートメントのみを持つことができます。
時々、実際の値(1、2 ...など)を照会するため、条件も取得できません。
動的にbuildWHERE
句を必要とせずに、WHERE
句で動的な動作が必要だと思います。
単一のパラメーターで、次のようにISNULL
(またはCOALESCE
)を使用できます。
SELECT * FROM Table WHERE ID = ISNULL(@id, ID)
これにより、NULL
パラメーターをすべてに一致させることができます。一部の人はより長く、より明確に好む:
SELECT * FROM Table WHERE (@id IS NULL) OR (ID = @id)
IS NOT NULL。ただし、123456や1234、1237などの数値に対して123 *を要求する場合は、それをvarcharに変換してからテストできます。標準のワイルドカードを使用します。
Where句:cast(myIntColumn as varchar(15)) like '123%'
。
フィルタリングする値がストアドプロシージャのパラメーターであるか、@Value
という変数に含まれていると仮定すると、次のようにできます。
select * from table where @Value is null or intCol = @Value
@Value
がnullの場合、句のor
部分は無視されるため、クエリはintColでフィルタリングしません。
NULLに特別な意味を割り当てることで、パラメーターをワイルドカードとして使用できます。
DECLARE @q INT = 1
SELECT * FROM table WHERE IntegerColumn = @q OR @q IS NULL
このように、NULLを渡すと、すべての行を取得します。
NULLを照会する有効な値である場合、2つのパラメーターを使用する必要があります。
テーブルのすべての行の列の値が本当に必要な場合は、単に使用できます
select int_col
from table
すべての個別の値を知りたいが、それらが繰り返される回数を気にしない場合は、使用できます
select distinct int_col
from table
そして、すべての個別の値とそれぞれが表示される回数を知りたい場合は、
select int_col, count(*)
from table
group by int_col
値を適切にソートするには、追加できます
order by int_col
上記のすべてのクエリに対して。
共有してお楽しみください。
数字のワイルドカードに相当するものはコンパレータです。
したがって、すべての正の整数を検索する場合:
select int_col from table where int_col > 0
100から1000の間の数字:
select int_col from table where int_col BETWEEN 100 AND 1000
等々。
あなたが何を求めているのかよくわかりません。状況に応じて2つの異なるクエリを使用する必要があると思います。
特定の値を探していない場合:
SELECT * FROM table
特定の値を探している場合:
SELECT * FROM table WHERE intcol = 1