Sql Where子句中的Datepart计算
我对查询的Where子句中的datepart计算有问题。查询返回不带计算的结果,但如果我添加条件,则不会返回任何结果Sql Where子句中的Datepart计算,sql,sql-server,Sql,Sql Server,我对查询的Where子句中的datepart计算有问题。查询返回不带计算的结果,但如果我添加条件,则不会返回任何结果 DECLARE @StatusId INT; SELECT @StatusId = Id FROM company.Status WHERE Name = 'Signed' AND CompanyId = 1; SELECT FORMAT(CAST(cont.CreatedDate AS DATE), 'MM/dd') AS newDate, SUM(CASE WHE
DECLARE @StatusId INT;
SELECT @StatusId = Id FROM company.Status WHERE Name = 'Signed' AND CompanyId = 1;
SELECT FORMAT(CAST(cont.CreatedDate AS DATE), 'MM/dd') AS newDate,
SUM(CASE WHEN cont.UpdatedDate IS NOT NULL THEN 1 ELSE 0 END) AS TotalSignedLeads
FROM client.testw cont
WHERE cont.CompanyId = 1
AND cont.AffiliateId = 1
AND cont.CreatedDate BETWEEN '7-01-2017' AND '7-09-2017'
AND DATEPART(dw, cont.CreatedDate) NOT IN (1, 7) //This causes problem.
AND cont.StatusId = @StatusId
GROUP BY CAST(cont.CreatedDate AS DATE)
ORDER BY newDate ;
This is the data above query gives without the datepart condition.
newDate TotalSignedLeads
07/08 7
既然您在查询顶部将
cont.CreatedDate
转换为日期,我怀疑它实际上是一个varchar
。。。因此你需要
...
and datepart(weekday, cast(cont.CreatedDate as date)) not in (1,7)
...
如果没有得到错误,则没有任何行满足该条件。也许你的环境不是你想象的那样
另外,不确定按CAST(@StatusId.CreatedDate AS DATE)分组的
是什么意思…我怀疑您想要的查询更像这样:
SELECT FORMAT(CAST(cont.CreatedDate AS DATE), 'MM/dd') AS newDate,
COUNT(cont.UpdatedDate) AS TotalSignedLeads
FROM client.testw cont
WHERE cont.CompanyId = 1 AND
cont.AffiliateId = 1 AND
cont.CreatedDate BETWEEN '2017-07-01' AND '2017-09-01' AND
DATEPART(dw, CAST(cont.CreatedDate AS DATE)) NOT IN (1, 7) AND //This causes problem.
cont.StatusId = @StatusId
GROUP BY FORMAT(CAST(cont.CreatedDate AS DATE), 'MM/dd')
ORDER BY newDate ;
变化:
- 比较日期采用标准格式,因此应正确解释
分组依据
使用与列的选择
相同的结构
SUM(CASE)
被更简单的COUNT()
CreatedDate
的值被强制转换为DATE
。老实说,我不确定这会解决任何问题,因为这应该会发生
问题出在哪里?如果在查询中添加以下条件,则不会返回任何数据。。。。和DATEPART(dw,cont.CreatedDate)不在(1,7)//这会导致问题。我尝试了您的解决方案,但仍然没有记录。数据库中有符合条件的行@StatusId.CreatedDate是一个输入错误。现在更正了您是否检查了日期优先设置?你能发布应该返回的数据吗?是的…设置为7这是上面查询给出的数据,没有datepart条件。newDate TotalSignedLeads 07/08 7但该数据的实际日期是什么?将cont.CreatedDate添加到查询中