2011-05-09 21 views
3

我有一個複雜的查詢結束一個問題:SQL日期部分Where子句不工作

SQLString = "SELECT i.CONCOM, 
        COALESCE(SUM(CASE 
            WHEN C.CATEGORY_ID = '30' THEN 0 
            ELSE t.LOGMINS END), 0) AS TotalWithoutNew, 
        COALESCE(SUM(t.LOGMINS), 0) AS TotalAllId 
       FROM Inquiry AS i 
     INNER JOIN TIMELOG AS t ON t.INQUIRY_ID = i.INQUIRY_ID 
     INNER JOIN PROD AS P ON i.PROD_ID = P.PROD_ID 
     INNER JOIN CATEGORY AS C ON P.CATEGORY_ID = C.CATEGORY_ID 
       WHERE (DATEPART(m, ESCDATE) = " & objmonth & ") 
       AND (DATEPART(y, ESCDATE) = " & objyear & ") 
      GROUP BY i.CONCOM 
      ORDER BY concom ASC" 

的查詢工作正常,而不當我把where子句中它沒有返回值的where子句,但。 ESCDATE是DATETIME字段。我首先想到的不是將整數傳遞給它,而是字符串,它絕對是通過整數。

在ASP腳本中,我使用Request.Querystring來獲得一個月和一年,而我基本上希望檢查ES​​C日期,它僅從指定年份中指定的月份返回結果。

+0

如果在ESCDATE上有索引,使用DATEPART將無法使用它。 – 2011-05-09 23:42:37

+2

您應該使用參數化查詢。如果直接從Request.Querystring中取這些值並將它們連接到查詢中,您將會遇到SQL注入問題。 – 2011-05-09 23:43:47

+0

爲了加強@ martin的評論,sql注入問題是一件大事,你不應該忽視它。 – 2011-11-21 02:40:18

回答

4

'y'說明符是年中的一天,而不是一年。而是嘗試'yy'或'yyyy'。

+0

確實解決了這個問題;謝謝! – Trinitrotoluene 2011-05-09 23:41:41

+2

或'年'。 * * * * – 2011-05-09 23:42:38