你怎么可以查询该列中的任何值的列? (即如何建立一个动态的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数据源,只能有1个select语句。
有时我会查询实际值(如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)
一个简单的答案是使用:NOT IS NULL。 但是,如果你要求说123 *像123456或1234或1237的数字,则你可以将其转换为varchar,再试着用标准通配符。
在您的where子句: cast(myIntColumn as varchar(15)) like '123%'
。
假设你过滤的值在存储过程中的参数,或包含在所谓的可变@Value
,你可以做这样的:
select * from table where @Value is null or intCol = @Value
如果@Value
为null,则or
条款的一部分被忽略,因此查询将不会intCol过滤。
通配符号相当于是比较。
所以,如果你想找到所有正整数:
select int_col from table where int_col > 0
百和千之间的任意数字:
select int_col from table where int_col BETWEEN 100 AND 1000
等等。
我不太明白你的要求。 我认为你应该使用两个不同的查询,对你有不同的情况。
当你不寻找一个特定值:
SELECT * FROM table
当你正在寻找一个特定的值:
SELECT * FROM table WHERE intcol = 1
您可以通过为NULL赋予特殊的含义使用参数作为通配符:
DECLARE @q INT = 1
SELECT * FROM table WHERE IntegerColumn = @q OR @q IS NULL
这样,当你在NULL传递; 你得到的所有行。
如果NULL是要查询的一个有效的值,那么你需要使用两个参数。
如果你真的想你列上,你可以简单地使用表中所有行的值
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
上面所有的查询。
分享和享受。