您好我是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 ) ) ) )
答案 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是什么?你可以在小提琴上发布样本数据和查询吗?