Sql Where子句发出的情况
我试图编写一个WHERE子句,它为一个实例捕获一组参数,为另一个实例捕获另一组参数 现在我写了这样的东西:Sql Where子句发出的情况,sql,case,where,Sql,Case,Where,我试图编写一个WHERE子句,它为一个实例捕获一组参数,为另一个实例捕获另一组参数 现在我写了这样的东西: Where s.ProjectID=110 and wfseg.SiteEventGroupID=3 and wfse.EventStatusID in (1,2) CASE WHEN cf.PaperDocumentTypeID <> 1 THEN CAST(cf.DateUploaded as DATE) = '09/25
Where
s.ProjectID=110
and wfseg.SiteEventGroupID=3
and wfse.EventStatusID in (1,2)
CASE WHEN cf.PaperDocumentTypeID <> 1
THEN CAST(cf.DateUploaded as DATE) = '09/25/2014'
ELSE CAST(cf.DateUploaded as DATE) = '09/25/2014' AND CAST(cr.CheckDate as DATE) ='09/25/2014'
END
如果PaperDocumentType不是1,那么它应该显示参数CASTcf.dateUpload as DATE='09/25/2014'如果文档是1,那么它应该显示以下两个参数CASTcf.dateUpload as DATE='09/25/2014'和CASTcr.CheckDate='09/25/2014'
因此,在运行之前,我会遇到一些错误-不确定应该如何重写以使其正常运行 是在什么时候,不是在什么地方。是在什么时候,不是在什么地方。试试看
Where
s.ProjectID = 110 and
wfseg.SiteEventGroupID = 3 and
wfse.EventStatusID in (1,2) and
CAST(cf.DateUploaded as DATE) = @parameter and
CAST(cr.CheckDate as DATE) = (case when whencf.PaperDocumentTypeID <> 1 then @parameter else CAST(cr.CheckDate as DATE)END)
试试看
Where
s.ProjectID = 110 and
wfseg.SiteEventGroupID = 3 and
wfse.EventStatusID in (1,2) and
CAST(cf.DateUploaded as DATE) = @parameter and
CAST(cr.CheckDate as DATE) = (case when whencf.PaperDocumentTypeID <> 1 then @parameter else CAST(cr.CheckDate as DATE)END)
首先,它将以时间为基础,而不是以地点为基础。此外,当对从完整日期时间转换为日期的日期执行查询时,将阻止优化任何具有日期字段的此类索引 为了简化case-when子句,由于cast无论如何都是相同的日期,所以可以将其缩短为
s.ProjectID=110
and wfseg.SiteEventGroupID=3
and wfse.EventStatusID in (1,2)
and CAST(cf.DateUploaded as DATE) = '09/25/2014'
and ( cf.PaperDocumentTypeID = 1
OR ( cf.PaperDocumentTypeID <> 1 and CAST(cr.CheckDate as DATE) ='09/25/2014' ))
因为你没有做演员,你可以
and cf.DateUploaded >= '2014-09-25' and cf.DateUploaded < '2014-09-26'
这样,从9月25日到晚上11:59:59的所有时间都有了。稍长一点,但如果日期是索引的一部分则更好。首先,它将以时间为基础,而不是以地点为基础。此外,当对从完整日期时间转换为日期的日期执行查询时,将阻止优化任何具有日期字段的此类索引 为了简化case-when子句,由于cast无论如何都是相同的日期,所以可以将其缩短为
s.ProjectID=110
and wfseg.SiteEventGroupID=3
and wfse.EventStatusID in (1,2)
and CAST(cf.DateUploaded as DATE) = '09/25/2014'
and ( cf.PaperDocumentTypeID = 1
OR ( cf.PaperDocumentTypeID <> 1 and CAST(cr.CheckDate as DATE) ='09/25/2014' ))
因为你没有做演员,你可以
and cf.DateUploaded >= '2014-09-25' and cf.DateUploaded < '2014-09-26'
这样,从9月25日到晚上11:59:59的所有时间都有了。稍长一点,但如果日期是索引的一部分则更好。大小写的格式没有“WHERE”这个词 其次,我相信MySQL日期的格式是“YYYY-MM-DD”,但它可能是特定于本地化的,所以我不是100%确定。另外,别忘了另一种生成日期的方法是使用DATE函数。我不确定哪种情况或日期更有效。 例如:
DATE(cf.DateUploaded) = '2014-09-25'
案例的格式没有“WHERE”一词 其次,我相信MySQL日期的格式是“YYYY-MM-DD”,但它可能是特定于本地化的,所以我不是100%确定。另外,别忘了另一种生成日期的方法是使用DATE函数。我不确定哪种情况或日期更有效。 例如:
DATE(cf.DateUploaded) = '2014-09-25'
不确定参数将包含哪些内容?将参数替换为所需的日期,如您给出的示例,或者在查询之前声明@parameter DATETIME='2014-09-25'。不确定参数将包含哪些内容?将参数替换为所需的日期,如您给出的示例,或者在查询之前声明@parameter DATETIME='2014-09-25'-编辑原始的是什么时候,但实际的查询没有我编辑它简洁与我的问题有什么时候。此外,我使用的是T-SQL而不是MySQL,但它与您给出的非常相似,所以我会尝试一下,但日期不应该是IssueEYP-将原始数据编辑为WHEN,但实际查询没有我编辑它,以便简洁地说明我的问题,它具有WHEN。此外,我使用的是T-SQL而不是MySQL,但它与您提供的非常相似,所以我会尝试一下,但日期不应该是一个问题