2013-10-17 78 views
0

您好我是SQL Server 2008的新手,當我在SQL Server中執行以下查詢時,它不顯示源表中的數據。我相信下面的查詢可以被優化以正確地獲取數據。如果有人幫我做到這一點,我會非常感謝他們。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

「Create_Date」和「Date_Resolved」的數據類型是什麼? –

+7

'優化'和'糾正不正確的查詢'是兩個不同的請求..所以人們回答可能不會得到你想要的。你的問題必須更清楚。 – sksallaj

+0

如果您使用的是SQL Server 2008,我相信默認的日期格式是'YYYY-MM-DD'而不是'MM/DD/YYYY'。格式正確嗎? –

回答

2

這個查詢是一團糟。我刪除了不必要的括號,重新組織和合並的條件,格式化了sql並刪除了重複的條件(一個表示爲: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是什麼?你能發佈樣本數據和一個查詢小提琴嗎?