我只想结合我团队各成员的服务总年数。下面的脚本工作正常,但是,每个成员的雇用日期不会从数据库中提取。这意味着我必须硬编码每个雇用的人,然后对他们进行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
答案 0 :(得分:1)
改进为ColdFusion发布的代码的解决方案实际上正在取代它。通过将每个成员的hire_dates添加到现有MySQL数据库并在下面编写查询;我不再需要原始帖子中的所有ColdFusion代码。
SELECT SUM(TIMESTAMPDIFF(YEAR,hire_date,NOW())) AS Dif
FROM members
WHERE hire_date IS NOT NULL