php 从mysql日期字段获取基于日和月的数据

mwngjboj  于 2023-01-12  发布在  PHP
关注(0)|答案(3)|浏览(157)

我有一个mysql表employees,其中有一列'Date_of_joining'。我正在尝试获取加入日期最接近当前日期的员工列表
员工:

EmpID Date_of_joining 
1     2015-08-30
2     2019-01-15 
3     2018-01-11

预期结果(假设当前日期为今天,即2023年1月9日)

EmpID Date_of_joining 
3     2018-01-11
2     2019-01-15 
1     2015-08-30

我基本上是想找出谁快到他们的工作周年纪念日了。任何线索或帮助都很感激

编辑:

下面的查询工作完全像我想要的,但我也想得到两个日期之间的类似数据,有没有办法实现这一点使用相同的查询或任何调整

SELECT *, (366 + DAYOFYEAR(Date_of_joining ) - DAYOFYEAR(NOW())) % 366 as left_days FROM employees ORDER BY left_days
aiqt4smr

aiqt4smr1#

您希望按即将到来的周年日期对每一行进行计算和排序。这很简单:

case
    when Date_of_joining + interval year(current_date) - year(Date_of_joining) year < current_date then
       Date_of_joining + interval year(current_date) + 1 - year(Date_of_joining) year
    else
       Date_of_joining + interval year(current_date) - year(Date_of_joining) year
end

(将非闰年的2月29日视为2月28日)

pdsfdshx

pdsfdshx2#

这里有两个函数可以帮助我们。DAYOFYEAR(d)返回日期d在一年中的第几天。例如,由于Jan有31天,我们期望DAYOFYEAR('2022-02-01')返回32
接下来,CURDATE()返回今天的日期。
加入日期的周年纪念日总是DAYOFYEAR(Date_of_joining),所以从今天到加入日期之间的天数是DAYOFYEAR(CURDATE()) - DAYOFYEAR(Date_of_joining),你可以把它添加到where子句中。

select <choose_a_column>, DAYOFYEAR(CURDATE()) - DAYOFYEAR(Date_of_joining) as delta
from my_table
where delta > 0 # anniversary has passed
and delta < 10 # choose the number yourself
jdgnovmf

jdgnovmf3#

我知道我的答案中的查询是复杂的,但我张贴它无论如何,如果它有助于。
它不仅允许有周年纪念日,而且周年纪念日之前的天数。
另一方面,我不得不复制获得周年纪念日的代码来获得天数,我不知道是否有更好的方法来做到这一点。

select *, 
if(date_format(Date_of_joining,'%m%d')<date_format(now(),'%m%d'),concat((year(current_date)+1),date_format(Date_of_joining,'-%m-%d')),concat((year(current_date)),date_format(Date_of_joining,'-%m-%d'))) as 'anniversary',
DATEDIFF(if(date_format(Date_of_joining,'%m%d')<date_format(now(),'%m%d'),concat((year(current_date)+1),date_format(Date_of_joining,'-%m-%d')),concat((year(current_date)),date_format(Date_of_joining,'-%m-%d'))),NOW()) as 'nbDays' 
from employees 
order by anniversary

相关问题