0

您好我是 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 ) ) ) ) 
4

1 回答 1

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 是什么?您可以在小提琴上发布示例数据和查询吗?

于 2013-10-17T15:17:12.707 回答