如何在int列中查询任何值?

时间:2012-05-16 15:59:23

标签: sql sql-server-2008 tsql select

如何在列中查询该列中的任何值? (即。如何构建一个可以过滤值的动态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语句。

7 个答案:

答案 0 :(得分:38)

  

有时候我会查询实际值(比如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)

答案 1 :(得分:6)

一个简单的答案就是使用:IS NOT NULL。但如果您要求对123456或1234或1237这样的数字说123 *,那么您可以将其转换为varchar,然后使用标准通配符进行测试。

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

答案 2 :(得分:4)

假设您要过滤的值是存储过程中的参数,或者包含在名为@Value的变量中,您可以这样做:

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

如果@Value为null,则忽略该子句的or部分,因此查询不会对intCol进行过滤。

答案 3 :(得分:1)

您可以通过为NULL指定特殊含义将参数用作通配符:

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

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

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

答案 4 :(得分:1)

数字的通配符相当于比较器。

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

select int_col from table where int_col > 0

一百到一千之间的任何数字:

select int_col from table where int_col BETWEEN 100 AND 1000

等等。

答案 5 :(得分:1)

我不太明白你在问什么。我认为你应该针对不同的情况使用两种不同的查询。

当您没有寻找特定值时:

SELECT * FROM table

当您要查找特定值时:

SELECT * FROM table WHERE intcol = 1 

答案 6 :(得分: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

以上所有查询。

分享并享受。