【问题标题】:SQL Datepart Where Clause not workingSQL Datepart Where 子句不起作用
【发布时间】:2011-05-09 23:29:52
【问题描述】:

我在完成复杂查询时遇到问题:

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 是一个日期时间字段。一开始我以为它不是传递整数而是字符串,它肯定是传递整数。

进一步在 ASP 脚本中,我使用 Request.Querystring 来获取一个月和一年,我基本上想检查 ESC 日期,它只从指定年份中指定的月份返回结果。

【问题讨论】:

  • 如果ESCDATE上有索引,使用DATEPART将无法使用。
  • 您应该使用参数化查询。如果您直接从Request.Querystring 获取这些值并将它们连接到查询中,您将遇到 SQL 注入问题。
  • 为了强化@martin的评论,sql注入问题有点大,你不应该忽略它。

标签: sql sql-server tsql asp-classic ado


【解决方案1】:

“y”说明符是一年中的某一天,而不是一年。改用“yy”或“yyyy”。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-01-27
    • 1970-01-01
    • 1970-01-01
    • 2014-01-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-20
    相关资源
    最近更新 更多