【问题标题】:MySQL convert YEARWEEK to dateMySQL 将 YEARWEEK 转换为日期
【发布时间】:2015-08-02 13:18:47
【问题描述】:

我有一个来自 MySQL 的 YEARWEEK() 转换值

201439

我想用 MySQL 将它转换回那个星期数的开始日期,可能吗?

例如

SELECT xxx('201439');

然后返回

'2014-09-16'

【问题讨论】:

  • 类似DATE('2014-01-01') + INTERVAL 39 WEEK
  • 我收到了您更新的问题。我的解决方案是您需要在源代码中创建一个非常简单的函数,以将您从查询中获得的 String result 解析为您想要的模式。例如,您可以使用 subString 将其剪切并填充到您的图案中。 :D

标签: mysql


【解决方案1】:

您可以使用此代码喜欢示例:

String string = "January 2, 2010";
DateFormat format = new SimpleDateFormat("MMMM d, yyyy", Locale.ENGLISH);
Date date = format.parse(string);

希望你喜欢! ^^

【讨论】:

  • 那是什么语言?
【解决方案2】:

您需要注意 yearweek 处于预期的“模式”。 (见https://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html#function_week

STR_TO_DATE 中使用的格式应该匹配。 (见https://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html#function_date-format

例如如果使用模式 2(1-53,第 1 周是第一周有周日,周从周日开始)

SELECT STR_TO_DATE(CONCAT('201439',' Sunday'), '%X%V %W');

例如如果使用模式 3(遵循 ISO-8601),(1-53,第 1 周是第一周有 4 天或更多天,从星期一开始),您需要使用小写版本。

SELECT STR_TO_DATE(CONCAT('201439',' Monday'), '%x%v %W');

所以,会得到以下信息(2014-09-28 是星期日):

SELECT yearweek('2014-09-28', 2);
201439
SELECT yearweek('2014-09-28', 3);
201439
SELECT yearweek('2014-09-29', 2);
201439
SELECT yearweek('2014-09-29', 3);
201440

然后

SELECT STR_TO_DATE(CONCAT('201439',' Sunday'), '%X%V %W'); -- mode 2
2014-09-28
SELECT STR_TO_DATE(CONCAT('201439',' Monday'), '%x%v %W'); -- mode 3 
2014-09-22
SELECT STR_TO_DATE(CONCAT('201440',' Monday'), '%x%v %W'); -- mode 3
2014-09-29

【讨论】:

  • 这很有帮助,但也令人困惑,包括模式 0(默认模式)的示例会很有帮助。
  • 而且它并不总是给出正确的结果。我的 MySQL 有 default_week_format=3 所以 WEEK() 和 YEARWEEK() 模式 3 一样给出正确的结果。但是对于第 202053 和 202101 周 STR_TO_DATE(CONCAT(202053,'Monday'), '%X%V %W') 返回同样的结果:2021-01-04。试试这个有趣:SELECT @@default_week_format AS 模式,YEAR('2021-01-04')*100+WEEK('2021-01-04') AS WEEK('2021-01-04'), STR_TO_DATE(CONCAT(202053,'Monday'), '%X%V %W') AS STR_TO_DATE('202053'), STR_TO_DATE(CONCAT(202101,'Monday'), '%X%V %W') AS STR_TO_DATE('202101'),年周('2021-01-04', 3)。
【解决方案3】:

你可以使用STR_TO_DATE函数和你需要的format

http://sqlfiddle.com/#!9/9eecb7d/2017

SELECT STR_TO_DATE(CONCAT(YEARWEEK(NOW()),' Monday'), '%X%V %W');

SELECT STR_TO_DATE(CONCAT('201439',' Monday'), '%X%V %W');

【讨论】:

    【解决方案4】:

    试试:

    SELECT DATE(CONCAT(LEFT('201439', 4), '-01-01')) + INTERVAL RIGHT('201439', 2)-1 WEEK
    

    这不会得到一周的开始,它会得到与当年 1 月 1 日相同的星期几。

    【讨论】:

      猜你喜欢
      • 2010-12-18
      • 2011-08-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-10
      • 1970-01-01
      • 1970-01-01
      • 2014-01-11
      相关资源
      最近更新 更多