2011-12-02 75 views
1

我需要建议编写满足这些条件的查询。如何编写查询以满足搜索条件

我传递三个参数到存储过程:

  • to date
  • from date
  • is active

的要求是这样的:

  • 上页面加载显示今天
  • 谁是regisatar上只传递to date然后我需要显示只有那些谁注册器,直到日期
  • 在经过from date显示只有那些谁是日期
  • 后两者那么只有那些谁落他们之间

我试过了,但那是完全浪费。

If (@viewPending = 1 or @viewPending = 0) 
    Begin 
     IF @TDate IS NULL AND @FDate IS NOT NULL 
      SELECT 
      RegDate, 
      CenterName As [Center Name], 
      OwnerName As [Owner Name], 
      MobileNo As [Mobile], 
      MailID  As [EMail ID], 
      isVerified As [Verified] 
     FROM TBL_iREGFORM 
     WHERE REGDATE >= @FDate AND isVerified in (Case When @viewPending =1 Then 0 Else 1 | 0 End) 
     IF @TDate IS NOT NULL AND @FDate IS NULL 
      SELECT 
      RegDate, 
      CenterName As [Center Name], 
      OwnerName As [Owner Name], 
      MobileNo As [Mobile], 
      MailID  As [EMail ID], 
      isVerified As [Verified] 
     FROM TBL_iREGFORM 
     WHERE REGDATE <= @FDate AND isVerified in (Case When @viewPending =1 Then 0 Else 1 | 0 End) 
     IF @TDate IS NOT NULL AND @FDate IS NOT NULL 
      SELECT 
      RegDate, 
      CenterName As [Center Name], 
      OwnerName As [Owner Name], 
      MobileNo As [Mobile], 
      MailID  As [EMail ID], 
      isVerified As [Verified] 
     FROM TBL_iREGFORM 
     WHERE REGDATE BETWEEN @FDate AND @TDATE AND isVerified in (Case When @viewPending =1 Then 0 Else 1 | 0 End) 
    ELSE 

      SELECT 
      RegDate, 
      CenterName As [Center Name], 
      OwnerName As [Owner Name], 
      MobileNo As [Mobile], 
      MailID  As [EMail ID], 
      isVerified As [Verified] 
     FROM TBL_iREGFORM 
     WHERE REGDATE =CONVERT(VARCHAR(10),GETDATE(),103) AND isVerified in (Case When @viewPending =1 Then 0 Else 1 | 0 End) 

回答

4
SELECT * FROM 
    MyTable 
WHERE 
    (@startDate IS NULL OR RegisterDate >= @startDate) 
AND (@endDate IS NULL OR RegisterDate <= @endDate) 
AND (@active IS NULL OR Active = @active)