【问题标题】:Format MySQL using CONCAT使用 CONCAT 格式化 MySQL
【发布时间】:2015-10-13 17:18:34
【问题描述】:

感谢一些帮助,我有一个 MySQL 查询,该查询从 2014 年 10 月 10 日开始,并对 12 个月内的假期数量进行罚款,例如 2014 年 10 月 10 日到 2015 年 10 月 9 日,然后是 2015 年 10 月 10 日到 2016 年-10-09

SELECT 
    e.name AS Employee,
    CEIL(DATEDIFF(h.date, e.startdate)/365) as Year,
    count(h.date) as Holidays_Taken
FROM employees AS e
LEFT JOIN holidays_taken AS h ON e.id = h.empid
WHERE e.id = 1
GROUP BY Year

结果

+----------+------+---------------+
| Employee | Year | Holidays_Taken|
+----------+------+---------------+
| Jon      | 1    | 5             |
+----------+------+---------------+
| Jon      | 2    | 1             |
+----------+------+---------------+

是否可以让年份显示 2014-10-10 到 2015-10-09 而不是第 1 年,然后在第 2 年显示 2015-10-10 到 2016-10-09

这是我的SQL FIDDLE

谢谢

【问题讨论】:

  • 您是否尝试将日期添加到返回字段列表中?喜欢:SELECT h.date, e.startdate, e.name [...]?
  • @CodeGodie 我有一个小提琴demo
  • 只是一个观察,但看起来你给自己一个闰年错误。每四年有366天。如果可能,请始终尝试使用内置函数进行日期和时间操作。

标签: php mysql sql database


【解决方案1】:

我会以这种方式创建CONCAT

SELECT 
    e.name AS Employee,
    CONCAT(
        CEIL(DATEDIFF(h.date, e.startdate)/365), 
        ' (',
        DATE_ADD(e.startdate, INTERVAL FLOOR(DATEDIFF(h.date, e.startdate)/365) YEAR), ' to ',        
        DATE_ADD(e.startdate, INTERVAL CEIL(DATEDIFF(h.date, e.startdate)/365) YEAR),
        ')'
        ) as Year,
    COUNT(h.date) AS Holidays_Taken,
    SUM(h.hours) AS Hours
FROM employees AS e
LEFT JOIN holidays_taken AS h ON e.id = h.empid
WHERE e.id = 1
GROUP BY Year

演示:SQL FIDDLE

【讨论】:

  • SQL FIDDLE 在员工表中的假期(小时)= 250 总假期如何 - 我在小提琴演示中尝试过的小时数感谢您的帮助
  • 下一个有 366 天的闰年 2016 年呢?
【解决方案2】:

不确定我是否达到了您的目标,但这是我的方法:

http://sqlfiddle.com/#!9/371a7/14

SELECT 
    e.name AS Employee,
    @year := CEIL(DATEDIFF(h.date, e.startdate)/365) AS Year,
    CONCAT(DATE_ADD(e.startdate, INTERVAL @year-1 YEAR),' - ',DATE_ADD(e.startdate, INTERVAL @year YEAR)),
    COUNT(h.date) AS Holidays_Taken,
    SUM(h.hours) AS Hours
FROM employees AS e
LEFT JOIN holidays_taken AS h ON e.id = h.empid
WHERE e.id = 1 
GROUP BY Year

【讨论】:

  • 很好的答案,但是下一个闰年是 2016 年 366 天呢?
  • 谢谢您会看看并尝试将其实施到您的查询中
猜你喜欢
  • 2012-09-12
  • 1970-01-01
  • 2021-10-09
  • 1970-01-01
  • 1970-01-01
  • 2011-10-10
  • 2021-09-20
  • 1970-01-01
相关资源
最近更新 更多