Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 通过where子句中的不同日期进行筛选_Sql_Sql Server_Where - Fatal编程技术网

Sql 通过where子句中的不同日期进行筛选

Sql 通过where子句中的不同日期进行筛选,sql,sql-server,where,Sql,Sql Server,Where,在这里,我使用MS SQL创建了一个简单的表 CREATE TABLE Students1 ( FirstName Nvarchar(100), SecondName Nvarchar(100), DOB Smalldatetime, RegisterDate smalldatetime, Archived int, ArchivedDate Smalldatetime ); Insert Into Students1(FirstName,SecondNAme,DOB,RegisterDate

在这里,我使用MS SQL创建了一个简单的表

CREATE TABLE Students1 (
FirstName Nvarchar(100),
SecondName Nvarchar(100),
DOB Smalldatetime,
RegisterDate smalldatetime,
Archived int,
ArchivedDate Smalldatetime
);

Insert Into Students1(FirstName,SecondNAme,DOB,RegisterDate,Archived,ArchivedDate)
Values('James','Bike',16/04/1900, 04/07/2017,0,Null);
Insert Into Students1(FirstName,SecondNAme,DOB,RegisterDate,Archived,ArchivedDate)
Values('Adam','Bike',16/04/1901,04/07/2017,0,Null);
Insert Into Students1(FirstName,SecondNAme,DOB,RegisterDate,Archived,ArchivedDate)
Values('Chris','Bike',16/04/1902,04/09/2017,1,getdate());
Insert Into Students1(FirstName,SecondNAme,DOB,RegisterDate,Archived,ArchivedDate)
Values('Sam','Bike',16/04/1999,04/09/2017,1,getdate());
Insert Into Students1(FirstName,SecondNAme,DOB,RegisterDate,Archived,ArchivedDate)
Values('Josh','Bike',16/04/1999,04/09/2017,1,getdate());
我想针对这一点做一个简单的select语句,根据本地变量的设置,在
RegisterDate
archiveDate
上进行过滤

例如,我将设置以下局部变量;
@FitlerRegisterDate
@FilterArchived
如果
@FilterREgisterDate
设置为1,则where子句将查看
RegisterDate
列,但如果
@FilterArchived
设置为1,则where子句将查看
ArchivedColumn
,如果两者都设置为1,则默认情况下应查看
RegisterDate

我已经看了一段时间了,看不到任何突出的东西。如果有人能给我指出正确的方向,那就太好了


谢谢

您可以使用
以及
子句根据变量值进行筛选:

SELECT *
FROM   dbo.Students1
WHERE  (    @FilterArchived     = 1 
        AND @FilterREgisterDate = 1 
        AND RegisterDate        = @dateToFilter )
  OR (   (    @FilterREgisterDate = 1 
          AND RegisterDate        = @dateToFilter )
      OR (    @FilterArchived = 1 
          AND ArchivedDate    = @dateToFilter ) )
大概是这样的:

SELECT *
  FROM Students1
 WHERE @FilterREgisterDate = 1 AND RegisterDate = @RegisterDate
       OR @FilterREgisterDate <> 1 AND @FilterArchived = 1 AND ArchivedDate = @ArchivedDate
; 
选择*
来自学生1
其中@FilterREgisterDate=1,RegisterDate=@RegisterDate
或者@FilterREgisterDate 1和@FilterArchived=1,ArchivedDate=@ArchivedDate
; 
?试一试
select * from dbo.Students1 where (@FilterArchived=1 AND @FilterREgisterDate=1) and registerdate='04/07/2017'

UNION 

select * from dbo.Students1 where (@FilterArchived!=1 AND @FilterREgisterDate=1) and registerdate='04/07/2017'

UNION

select * from dbo.Students1 where  (@FilterArchived=1 AND @FilterREgisterDate!=1) and archived=1