ColdFusion DateDiff - 有更好的方法吗?

时间:2015-06-16 20:17:46

标签: mysql coldfusion datediff simplify

我只想结合我团队各成员的服务总年数。下面的脚本工作正常,但是,每个成员的雇用日期不会从数据库中提取。这意味着我必须硬编码每个雇用的人,然后对他们进行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>

---编辑---

Per Matt建议作为数据库查询;这样的事情?

SELECT hire_date,
        ROUND((DATEDIFF(NOW(),hire_date)) / 365) AS dateDiff
FROM members
WHERE hire_date IS NOT NULL

---编辑2 ---

我刚刚意识到我忘了添加所有“dateDiff”的SUM()。如果有人使用这个SQL,我想你将不得不把它交给ColdFusion。除非我忽略了在SQL中执行此操作的方法吗?

---编辑3 ---

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

见下文。 :d

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

1 个答案:

答案 0 :(得分:1)

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

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