21

How can you query a column for any value in that column? (ie. How do I build a dynamic where clause that can either filter the value, or not.)

I want to be able to query for either a specific value, or not. For instance, I might want the value to be 1, but I might want it to be any number.

Is there a way to use a wild card (like "*"), to match any value, so that it can be dynamically inserted where I want no filter?

For instance:

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

The reason why I do not want to use 2 separate SQL statements is because I am using this as a SQL Data Source, which can only have 1 select statement.

4

7 に答える 7

45

時々私は実際の値(1、2 ...など)を照会するので、条件を設定することもできません。

WHERE私はあなたがあなたの条項を動的に構築する必要なしにあなたの条項にいくつかの動的な振る舞いをしたいと思っていますWHERE

ISNULL単一のパラメーターで、次のように(またはCOALESCE)使用できます。

 SELECT * FROM Table WHERE ID = ISNULL(@id, ID)

これにより、NULLパラメーターをすべてに一致させることができます。より長く、より明確なものを好む人もいます。

 SELECT * FROM Table WHERE (@id IS NULL) OR (ID = @id)
于 2012-05-16T16:09:21.920 に答える
7

簡単な答えは次のようになります:ISNOTNULL。ただし、123456、1234、1237などの数値に対してたとえば123 *を要求している場合は、それをvarcharに変換してから、標準のワイルドカードを使用してテストすることができます。

where句で:cast(myIntColumn as varchar(15)) like '123%'

于 2012-05-16T16:04:14.003 に答える
4

フィルタリングしている値がストアドプロシージャのパラメータであるか、またはという変数に含まれていると仮定すると、次の@Valueように実行できます。

select * from table where @Value is null or intCol = @Value

@Valuenullの場合or、句の一部は無視されるため、クエリはintColでフィルタリングされません。

于 2012-05-16T16:09:18.003 に答える
1

数値のワイルドカードに相当するのはコンパレータです。

したがって、すべての正の整数を検索したい場合は、次のようにします。

select int_col from table where int_col > 0

百から千の間の任意の数:

select int_col from table where int_col BETWEEN 100 AND 1000

等々。

于 2012-05-16T16:05:21.250 に答える
1

私はあなたが何を求めているのかよくわかりません。状況に応じて、2つの異なるクエリを使用する必要があると思います。

特定の値を探していない場合:

SELECT * FROM table

特定の値を探している場合:

SELECT * FROM table WHERE intcol = 1 
于 2012-05-16T16:06:23.627 に答える
1

NULLに特別な意味を割り当てることにより、パラメーターをワイルドカードとして使用できます。

DECLARE @q INT = 1
SELECT * FROM table WHERE IntegerColumn = @q OR @q IS NULL

このように、NULLを渡すと、すべての行を取得します。

NULLが照会する有効な値である場合は、2つのパラメーターを使用する必要があります。

于 2012-05-16T16:02:32.107 に答える
1

テーブルのすべての行の列の値が本当に必要な場合は、単に使用できます

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

上記のすべてのクエリに。

共有してお楽しみください。

于 2012-05-16T16:18:19.810 に答える