在一个 mysqli 查询中给出年份、周数和工作日时返回 DATE

Posted

技术标签:

【中文标题】在一个 mysqli 查询中给出年份、周数和工作日时返回 DATE【英文标题】:Return DATE when year, week number and weekday given in one mysqli query 【发布时间】:2020-03-25 06:19:47 【问题描述】:

我有下表:

--------------------------------------
| Year |  Week  |  Weekday |   Date  |
--------------------------------------
| 2019 |   20   |     3    |         |
| 2019 |   10   |     4    |         |
| 2019 |    2   |     1    |         |
| 2019 |   41   |     2    |         |
--------------------------------------

我希望根据其他列中的年、周和工作日来填充最后一列的确切日期(“Y-M-d”)。 是否可以在一个 mysqli 查询中执行此操作? 到目前为止,我尝试过:

UPDATE table 
SET Date = STR_TO_DATE(Year Week Weekday, '%X %V %w')

UPDATE table 
SET Date = DATE(STR_TO_DATE(Year Week Weekday, '%X %V %w'))

UPDATE table 
SET Date = DATE(DATE_FORMAT(Year Week Weekday, '%Y %m %d'))

没有成功。 关于如何在一个查询中获得此信息的任何想法?

【问题讨论】:

感谢您的评论,forpas。我想要做的是根据其他列的信息在一列中获取日期。所以我的主要问题是获得正确的语法,即 DATE_FORMAT 或 MAKEDATE 和 UPDATE 的组合。 【参考方案1】:

使用MAKEDATE(),您可以这样计算日期:

UPDATE tablename 
SET Date = MAKEDATE(Year, (Week - 1) * 7 + Weekday);

请参阅demo。 结果:

| Year | Week | Weekday | Date       |
| ---- | ---- | ------- | ---------- |
| 2019 | 20   | 3       | 2019-05-16 |
| 2019 | 10   | 4       | 2019-03-08 |
| 2019 | 2    | 1       | 2019-01-08 |
| 2019 | 41   | 2       | 2019-10-09 |

【讨论】:

就是这样!谢谢!

以上是关于在一个 mysqli 查询中给出年份、周数和工作日时返回 DATE的主要内容,如果未能解决你的问题,请参考以下文章

Elixir/Phoenix 日期从工作日 + 周数

如何将周数和年份转换为 unix 时间戳?

Redshift:提取给定星期和年份的星期六日期

从 SQL Server 中的日期检索年份和周数

单个 mysqli 查询语句来获取总行数和限制

mysqli查询成功但给出错误号0 [关闭]