Как вы запрашиваете столбец 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.
Ответы
Ответ 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
и т.д.