Фильтровать по разным датам в предложении where - PullRequest
0 голосов
/ 04 июля 2018

Здесь я создал простую таблицу с использованием 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());

Я хочу сделать простое предложение выбора против этого, где я фильтрую либо RegisterDate, либо ArchivedDate в зависимости от того, как настроены мои локальные переменные.

Например, у меня будут установлены следующие локальные переменные; @FitlerRegisterDate @FilterArchived Если либо @FilterREgisterDate установлено в 1, то предложение where будет смотреть на столбец RegisterDate, но если @FilterArchived установлено в 1, то предложение where будет смотреть на ArchivedColumn AND, если они оба установлены до 1, то по умолчанию следует посмотреть на RegisterDate

Я некоторое время смотрел на это и не видел ничего, что выделялось. Если бы кто-то мог указать мне правильное направление, это было бы здорово.

Спасибо.

Ответы [ 3 ]

0 голосов
/ 04 июля 2018

Примерно так:

SELECT *
  FROM Students1
 WHERE @FilterREgisterDate = 1 AND RegisterDate = @RegisterDate
       OR @FilterREgisterDate <> 1 AND @FilterArchived = 1 AND ArchivedDate = @ArchivedDate
; 

0 голосов
/ 04 июля 2018
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
0 голосов
/ 04 июля 2018

Вы можете использовать предложения AND и OR для фильтрации по значениям вашей переменной:

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