【问题标题】:Get data based on day and month from mysql date field从mysql日期字段获取基于日期和月份的数据
【发布时间】:2023-01-09 19:52:03
【问题描述】:

我有一个带有“Date_of_joining”列的 mysql 表 employees。我正在尝试获取加入日期最接近当前日期的员工列表

雇员 :

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

预期结果(假设当前为今天,即 2023-01-09)

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

我基本上是想找出谁正在接近他们的工作周年纪念日。任何线索或帮助表示赞赏

【问题讨论】:

  • 到目前为止你试过什么查询?当前的日期格式似乎可以通过内置的 MySQL 查询功能“排序”。否则,只需在 PHP 中获取它们并在查询后对它们进行排序。我会用 strtotime 分解日期并通过简单的数组排序函数进行排序,但这是众多排序函数之一。
  • 我试过这个:SELECT * FROM employees ORDER BY ABS(DATEDIFF(NOW(), Date_of_joining))
  • 如果您要列出日期最接近今天的员工,员工的顺序应该是“2-3-1”,对吗...?
  • 这从月日部分对日期进行排序:SELECT * FROM employees ORDER BY SUBSTRING(Date_of_joining, 6) ASC

标签: php mysql


【解决方案1】:

这里有两个功能会有所帮助。 DAYOFYEAR(d) 返回日期 d 所在年份的天数。例如,因为一月有 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

【讨论】:

    猜你喜欢
    • 2021-10-20
    • 1970-01-01
    • 1970-01-01
    • 2015-02-22
    • 1970-01-01
    • 1970-01-01
    • 2018-10-15
    • 2017-01-19
    • 2013-08-26
    相关资源
    最近更新 更多