在我的数据库中,我有“startingdate”,“endingdate”,“daterange”,“numdays”等属性以及其他一些对我的问题没有任何重要性的属性。我正在尝试建立一个休假申请系统,允许用户申请休假。
属性“startingdate”和“endingdate”是相当自我解释的。 “numdays”是从“起始日期”到“结束日期”的天数。至于“日期范围”,它是从开始日期到结束日期的所有日期,不包括开始日期。例如,如果开始日期是2014-01-01,结束日期是2014-01-03,则“日期范围”将是“2014-01-02 2014-01-03”。我需要这个用于php日历以突出显示用户已经应用的日期。
我遇到的问题是我不知道如何找到用户今年请假的天数。假设用户在2014-12-30至2015-01-02申请休假,“日期范围”将为“2014-12-31 2015-01-01 2015-01-02”。我如何找到2014年的天数?
很抱歉这个问题很长。
答案 0 :(得分:0)
可以更有效地完成,但我会留给你优化。
假设endingdate
在startingdate
之后:
select startingdate,endingdate,
case
when year(startingdate)=year(now())
and year(endingdate)=year(now())
then datediff(endingdate,startingdate)
when year(startingdate)=year(now())
and year(endingdate)>year(now())
then datediff(date(concat(year(now()),'-12-31')),startingdate)
when year(startingdate)<year(now())
and year(endingdate)=year(now())
then datediff(endingdate,date(concat(year(now()),'-01-01')))
when year(startingdate)<year(now())
and year(endingdate)>year(now())
then datediff(date(concat(year(now()),'-12-31')),date(concat(year(now()),'-01-01')))
else 0 end as daysOffThisYear
from myTable m;