Подтвердить что ты не робот

Как вы запрашиваете столбец int для любого значения?

Как вы можете запросить столбец для любого значения в этом столбце? (т.е. как создать динамическое предложение where, которое может либо фильтровать значение, либо нет.)

Я хочу иметь возможность запрашивать либо определенное значение, либо нет. Например, мне может понадобиться значение 1, но я могу хотеть, чтобы это было любое число.

Есть ли способ использовать wild card (например, "*" ), чтобы соответствовать любому значению, чтобы его можно было динамически вставить, где я не хочу фильтра?

Например:

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, который может иметь только один оператор select.

4b9b3361

Ответ 1

Иногда я запрашивал фактическое значение (например, 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)

Ответ 2

Простым ответом будет использование: IS NOT NULL. Но если вы просите сказать 123 * для чисел, таких как 123456 или 1234 или 1237, тогда вы можете преобразовать их в varchar, а затем протестировать против использования стандартных диких карт.

В вашем предложении where: cast(myIntColumn as varchar(15)) like '123%'.

Ответ 3

Предполагая, что значение, которое вы фильтруете, является параметром в хранимой процедуре или содержится в переменной с именем @Value, вы можете сделать это следующим образом:

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

Если @Value равно null, то часть or этого предложения игнорируется, поэтому запрос не будет фильтровать на intCol.

Ответ 4

Вы можете использовать параметр в качестве подстановочного знака, присвоив особое значение NULL:

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

Таким образом, когда вы передаете NULL; вы получаете все строки.

Если NULL является допустимым значением для запроса, тогда вам нужно использовать два параметра.

Ответ 5

Я не совсем понимаю, о чем вы спрашиваете. Я думаю, вы должны использовать два разных запроса для разных ситуаций, которые у вас есть.

Если вы не ищете определенное значение:

SELECT * FROM table

Когда вы ищете определенное значение:

SELECT * FROM table WHERE intcol = 1 

Ответ 6

Если вам действительно нужно значение вашего столбца для всех строк в таблице, вы можете просто использовать

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

ко всем запросам выше.

Поделитесь и наслаждайтесь.

Ответ 7

Эквивалент подстановочных знаков для чисел - это компараторы.

Итак, если вы хотите найти все положительные целые числа:

select int_col from table where int_col > 0

любые числа от ста до тысячи:

select int_col from table where int_col BETWEEN 100 AND 1000

и т.д.