SQL Server Where条件优化

时间:2013-10-17 13:35:01

标签: sql

您好我是SQL Server 2008新手,当我在SQL Server中执行以下查询时,它不显示源表中的数据。我相信可以优化以下查询以正确获取数据。如果有人帮助我这样做,我将非常感谢他们。

SELECT *
FROM   Report
WHERE  ( ( Create_Date BETWEEN '10/10/2013 16:00:00' AND '10/16/2013 15:59:59' )
          OR ( Date_Resolved BETWEEN '10/10/2013 16:00:00' AND '10/16/2013 15:59:59' )
          OR ( ( ( Create_Date < '10/10/2013 16:00:00' )
                 AND ( Date_Resolved > '10/10/2013 16:00:00' ) )
                OR ( ( Create_Date < '10/10/2013 16:00:00' )
                     AND ( IsDate(Date_Resolved) IS NULL ) ) )
          OR ( ( ( Create_Date < '10/16/2013 15:59:59' )
                 AND ( Date_Resolved > '10/16/2013 15:59:59' ) )
                OR ( ( Create_Date < '10/16/2013 15:59:59' )
                     AND ( IsDate(Date_Resolved) IS NULL ) ) ) ) 

1 个答案:

答案 0 :(得分:2)

这个查询很乱。我删除了不必要的括号,重新组织和合并条件,格式化了sql并删除了重复的OR条件(一个说Create_Date<'10/16/2013 15:59:59',第二个说Create_Date < '10/10/2013 16:00:00',两个都说IsDate (Date_Resolved) IS NULL,所以你可以安全地删除前者。并且它完成了两次:))。

这是你得到的,它完全相同:

SELECT 
    *
FROM Report
WHERE  

Create_Date BETWEEN '10/10/2013 16:00:00' AND '10/16/2013 15:59:59' 
OR 
Date_Resolved BETWEEN '10/10/2013 16:00:00' AND '10/16/2013 15:59:59' 
OR ( 
    Create_Date < '10/16/2013 15:59:59' 
    AND 
    Date_Resolved > '10/16/2013 15:59:59' 
)
OR ( 
    Create_Date < '10/10/2013 16:00:00' 
    AND (
        Date_Resolved > '10/10/2013 16:00:00' 
        OR
        IsDate (Date_Resolved) IS NULL 
    )
)

我仍然不知道它为什么不起作用,但现在应该更容易解决这个问题:)。 顺便问一下,isDate()做了什么,你的rdbms是什么?你可以在小提琴上发布样本数据和查询吗?