Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql Where子句中的Datepart计算_Sql_Sql Server - Fatal编程技术网

Sql 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

我对查询的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 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添加到查询中