你如何查询任意值int列?(How do you query an int column for a

2019-07-29 10:25发布

你怎么可以查询该列中的任何值的列? (即如何建立一个动态的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语句。

Answer 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)


Answer 2:

一个简单的答案是使用:NOT IS NULL。 但是,如果你要求说123 *像123456或1234或1237的数字,则你可以将其转换为varchar,再试着用标准通配符。

在您的where子句: cast(myIntColumn as varchar(15)) like '123%'



Answer 3:

假设你过滤的值在存储过程中的参数,或包含在所谓的可变@Value ,你可以做这样的:

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

如果@Value为null,则or条款的一部分被忽略,因此查询将不会intCol过滤。



Answer 4:

通配符号相当于是比较。

所以,如果你想找到所有正整数:

select int_col from table where int_col > 0

百和千之间的任意数字:

select int_col from table where int_col BETWEEN 100 AND 1000

等等。



Answer 5:

我不太明白你的要求。 我认为你应该使用两个不同的查询,对你有不同的情况。

当你不寻找一个特定值:

SELECT * FROM table

当你正在寻找一个特定的值:

SELECT * FROM table WHERE intcol = 1 


Answer 6:

您可以通过为NULL赋予特殊的含义使用参数作为通配符:

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

这样,当你在NULL传递; 你得到的所有行。

如果NULL是要查询的一个有效的值,那么你需要使用两个参数。



Answer 7:

如果你真的想你列上,你可以简单地使用表中所有行的值

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

上面所有的查询。

分享和享受。



文章来源: How do you query an int column for any value?