Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/55.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
计算datediff MySQL时的差异_Mysql_Datediff - Fatal编程技术网

计算datediff MySQL时的差异

计算datediff MySQL时的差异,mysql,datediff,Mysql,Datediff,在一个案例和一个where中使用datediff时,我得到了不同的结果。 这是表用户,省略了不相关的列,并与所有用户一起: UserIDUserTypeIDUserRegistration日期UserBirthdateUserJobidUserLocation ID11 213/12/201530/1/198223312/12/201519/9/1987241212/12/201511/9/1992251113/12/201515/5/19952240110/1/201622/7/197522

在一个案例和一个where中使用datediff时,我得到了不同的结果。 这是表用户,省略了不相关的列,并与所有用户一起:


UserIDUserTypeIDUserRegistration日期UserBirthdateUserJobidUserLocation ID11 213/12/201530/1/198223312/12/201519/9/1987241212/12/201511/9/1992251113/12/201515/5/19952240110/1/201622/7/19752247116/201629/2/20001650 1/12/1956225212/3/19982654120/1/201611/4/19902255125/1/2016 57/1/1990 591/201660113/1/20161/1/19981106111/12/201522/6/19891126611/2/2016 6711/2/2016 6811/2/2016
手动检查结果后,我意识到两者都不正确。 在
datediff
结果中添加
FLOOR()
,最终得到正确的结果

最后查询:

SELECT COUNT(users.UserID), case   when users.UserBirthDate IS NULL  then  'Sin Registro'  
when FLOOR(datediff(now(), users.UserBirthDate) / 365.25) > 50  then  '> 51' 
when FLOOR(datediff(now(), users.UserBirthDate) / 365.25) > 40 AND  FLOOR(datediff(now(), users.UserBirthDate) / 365.25) < 51 then  '41 - 50'  
when FLOOR(datediff(now(), users.UserBirthDate) / 365.25) > 30 AND  FLOOR(datediff(now(), users.UserBirthDate) / 365.25) < 41 then  '31 - 40'  
when FLOOR(datediff(now(), users.UserBirthDate) / 365.25) > 26 AND  FLOOR(datediff(now(), users.UserBirthDate) / 365.25) < 31 then  '27 - 30'  
when FLOOR(datediff(now(), users.UserBirthDate) / 365.25) > 20 AND  FLOOR(datediff(now(), users.UserBirthDate) / 365.25) < 27 then  '21 - 26'  
when FLOOR(datediff(now(), users.UserBirthDate) / 365.25) <= 20  then  '< 21'  end as AgeGroup FROM users GROUP BY AgeGroup;
选择COUNT(users.UserID),如果users.UserBirthDate为NULL,则为'Sin Registro'
当FLOOR(datediff(now(),users.UserBirthDate)/365.25)>50时,则“>51”
当FLOOR(datediff(now(),users.UserBirthDate)/365.25)大于40且FLOOR(datediff(now(),users.UserBirthDate)/365.25)小于51时,则为“41-50”
当FLOOR(datediff(now(),users.UserBirthDate)/365.25)大于30且FLOOR(datediff(now(),users.UserBirthDate)/365.25)小于41时,则为“31-40”
当FLOOR(datediff(now(),users.UserBirthDate)/365.25)大于26,FLOOR(datediff(now(),users.UserBirthDate)/365.25)小于31时,则为“27-30”
当FLOOR(datediff(now(),users.UserBirthDate)/365.25)大于20且FLOOR(datediff(now(),users.UserBirthDate)/365.25)小于27时,则为“21-26”

当楼层(datediff(now(),users.UserBirthDate)/365.25)有趣时。其中哪一个提供了正确的结果?你能用CREATE TABLE语句和一些示例数据设置一个SQL FIDLE吗?只是出于好奇,如果你将“users.UserBirthDate IS NOT NULL”添加到已断开的查询中会发生什么。关于你的问题“哪一个是正确的?”我再次检查,我(认为)发现了这个问题。谢谢@barrycarter得出了同样的结果。用SQLFiddle更新。非常感谢。