Mysql ColdFusion DateDiff-有更好的方法吗?

Mysql ColdFusion DateDiff-有更好的方法吗?,mysql,coldfusion,datediff,simplify,Mysql,Coldfusion,Datediff,Simplify,我只是想把我的团队各成员的总服务年限结合起来。下面的脚本工作正常,但是,每个成员的雇用日期并不是从数据库中提取的。这意味着我必须对每个雇佣的人进行硬编码,然后对他们进行DateDiff。拥有一个由28名成员组成的团队,这将导致代码管理噩梦 我的主要目标是使代码更简单、更高效,特别是在管理28名团队成员时。如果部分路径需要将用户的hiredate添加到数据库中;我能做到。我只是看到下面的代码需要重写,我只是不知道最好的方法 有更好的办法吗 <cfscript> REQUEST.ri

我只是想把我的团队各成员的总服务年限结合起来。下面的脚本工作正常,但是,每个成员的雇用日期并不是从数据库中提取的。这意味着我必须对每个雇佣的人进行硬编码,然后对他们进行DateDiff。拥有一个由28名成员组成的团队,这将导致代码管理噩梦

我的主要目标是使代码更简单、更高效,特别是在管理28名团队成员时。如果部分路径需要将用户的hiredate添加到数据库中;我能做到。我只是看到下面的代码需要重写,我只是不知道最好的方法

有更好的办法吗

<cfscript>
  REQUEST.rightnow = Now();
  dateBob = DateDiff("yyyy", "1996 02 01", REQUEST.rightnow);
  dateSam = DateDiff("yyyy", "1996 08 01", REQUEST.rightnow);
  dateJoe = DateDiff("yyyy", "2004 12 01", REQUEST.rightnow);
  dateJohn = DateDiff("yyyy", "2001 01 01", REQUEST.rightnow);
  combinedDate = (dateBob + dateSam + dateJoe + dateJohn);
</cfscript>
<cfoutput>
  #combinedDate# total years<br>
  #dateBob# years<br>
  #dateSam# years<br>
  #dateJoe# years<br>
  #dateJohn# years<br>
</cfoutput>
---编辑2---

我刚刚意识到我忘了加上所有“dateDiff”的SUM()。如果有人使用这个SQL,我想你必须将它交给ColdFusion。除非我忽略了在SQL中实现它的方法

---编辑3---

佩雷的鼓励意见;我找到了一个更好的方法。MySQL函数的TIMESTAMPDIFF()添加了一个单位变量,可以是日、月、年等。这允许我删除/365和ROUND()。这反过来又允许我使用SUM()并且不会从MySQL中获得语法错误。我还将别名从dateDiff重命名为just Dif,因为我想避免与dateDiff()混淆

见下文:D

SELECT hire_date,
        SUM(TIMESTAMPDIFF(YEAR,hire_date,NOW())) AS Dif
FROM members
WHERE hire_date IS NOT NULL

改进为ColdFusion发布的代码的解决方案实际上是替换它。通过将每个成员的雇用日期添加到现有的MySQL数据库,并在下面编写查询;我不再需要我原来帖子中所有的ColdFusion代码

SELECT SUM(TIMESTAMPDIFF(YEAR,hire_date,NOW())) AS Dif
FROM members
WHERE hire_date IS NOT NULL

不是真的。我的意思是,您可以将名称作为键加载,将日期作为值加载到struct中,并在struct上循环,以简化代码。但它基本上会做同样的事情。不管怎样,把它放在数据库中基本上都可以做到这一点。如果你把它放在数据库中,所有这些都可以用SQL查询之类的东西来完成吗?不要使用自己的约会逻辑。大多数数据库都有日期函数-使用它们:-)确切的语法是特定于数据库的,因此请更新问题标签以指示您的DBMS。(编辑)谢谢。搜索日期逻辑/表达式。。很多线程都是这样。例如,看看计算年差的逻辑。要查找所有员工的总年数,只需将其包装成一个
总和
*RE:这将导致代码管理噩梦。仅当您不在数据所属的数据库中存储数据时;-)你必须把它交给ColdFusion,我想不,你不需要。数据库也有聚合函数,如
SUM
函数。这是一种SQL 101,因此如果您不熟悉它们,您应该阅读和/或查看有关聚合SQL函数的教程。如果您只想要一个总的总数,请去掉第一个“雇用日期”参考。这是不必要的。事实上,上面的语法会在某些数据库中导致语法错误,因为第一列不是聚合函数的一部分。然而,MySQL对这类事情更宽容一点。更新!再次感谢你,利!
SELECT SUM(TIMESTAMPDIFF(YEAR,hire_date,NOW())) AS Dif
FROM members
WHERE hire_date IS NOT NULL