Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/64.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
Php MySQL Datediff跳过周六和周日_Php_Mysql_Datediff - Fatal编程技术网

Php MySQL Datediff跳过周六和周日

Php MySQL Datediff跳过周六和周日,php,mysql,datediff,Php,Mysql,Datediff,我需要得到行的总数,其中结束日期和开始日期的差值小于或等于2。但我需要跳过周六和周日,例如,如果我的开始日期是2012年11月29日,而结束日期是2012年3月12日,我应该得到2而不是4,因为2012年1月12日是周六,2012年2月12日是周日 date是开始日期 ReplayDate是结束日期 SELECT DATE_FORMAT(DateE, '%Y-%m-%d') AS startdate, DATE_FORMAT(ReplyDate, '%Y-%m-%d') AS r

我需要得到行的总数,其中结束日期和开始日期的差值小于或等于2。但我需要跳过周六和周日,例如,如果我的开始日期是2012年11月29日,而结束日期是2012年3月12日,我应该得到2而不是4,因为2012年1月12日是周六,2012年2月12日是周日

date是开始日期 ReplayDate是结束日期

SELECT  
   DATE_FORMAT(DateE, '%Y-%m-%d') AS startdate,
   DATE_FORMAT(ReplyDate, '%Y-%m-%d') AS replydate,   
   DATEDIFF(ReplyDate,DateE) as diff
FROM emailtodb.emailtodb_email 
WHERE 
   Status = 2  
AND
   DATEDIFF(ReplyDate,DateE)<=2
AND 
   DATE_FORMAT(DateE, '%Y-%m-%d') 
BETWEEN 
   '2012-11-29' AND '2012-12-12'  
AND 
   TIME_FORMAT(DateE, '%H:%i:00') 
BETWEEN 
   '00:00' AND '23:59' 
选择
日期格式(日期,%Y-%m-%d')作为起始日期,
日期格式(ReplyDate,%Y-%m-%d')作为ReplyDate,
DATEDIFF(ReplyDate,DateE)作为diff
从emailtodb.emailtodb_email
哪里
状态=2
及

DATEDIFF(ReplyDate,DateE)您可以在php脚本中检查它。获取startDate、endDate和dateDifference后,请检查

$startDay = date('l', $startDate);
$endDay = date('l', $endDate);

if ($dateDifference < 4){
     if ( $startDay == 'Saturday' || $startDay == 'Sunday' ){
        $dateDifference--;
     }
     if ( $endDay == 'Saturday' || $endDay == 'Sunday' ){
        $dateDifference--;
     }
 }
 else{
    $totalWeek = (int) $dateDifference / 7;
    $dateDifference -= ($totalWeek + 1)*2;

    if ($startDay == 'Saturday' && $endDay = 'Saturday')
        $dateDifference++;
    else if ($startDay == 'Sunday' && $endDay = 'Sunday')
        $dateDifference++;
    else
    {
         if($endDate == 'Saturday')
             $dateDifference++;
        if ($startDay == 'Sunday')
            $dateDifference++;
    }   
 }
$startDay=date('l',$startDate);
$endDay=日期('l',$endDate);
如果($dateDifference<4){
如果($startDay==‘星期六’|$startDay==‘星期日’){
$dateDifference--;
}
如果($endDay==‘星期六’|$$endDay==‘星期日’){
$dateDifference--;
}
}
否则{
$totalWeek=(int)$dateDifference/7;
$dateDifference-=($totalWeek+1)*2;
如果($startDay=='Saturday'&&$endDay='Saturday')
$dateDifference++;
如果($startDay=='Sunday'和&$endDay='Sunday')
$dateDifference++;
其他的
{
如果($endDate=='Saturday')
$dateDifference++;
如果($startDay=='Sunday')
$dateDifference++;
}   
}

我还没有编译代码,但我希望它能工作

我不能在我们的代码中这样做,主要是精确查询的末尾有一个group by date。例如,2012-12-12有4个结果的日期差为,因此您只需要在查询中执行此操作您可以在mysql服务器中创建过程或函数来计算日期差[是的,我只需要在查询中执行此操作。我是否可以在sql server中不执行任何函数就执行此操作?