mysql - MySQL WEEK(date[,mode]); 如何执行工作还是我在这里做错了什么?

标签 mysql date

我需要获取给定日期的一周开始日期和结束日期。 我需要给定日期的那一周从星期一开始。

如果我在不使用模式选项的情况下运行此查询。

SELECT EXTRACT(YEAR FROM '2015-01-20') YEAR,
       WEEK('2015-01-20') WK_No ,
       STR_TO_DATE(CONCAT(EXTRACT(YEAR FROM '2015-01-20'), WEEK('2015-01-20'), 'Monday'), '%X%V %W') Mon,
       STR_TO_DATE(CONCAT(EXTRACT(YEAR FROM '2015-01-20'), WEEK('2015-01-20'), 'Tuesday'), '%X%V %W') Tues,
       STR_TO_DATE(CONCAT(EXTRACT(YEAR FROM '2015-01-20'), WEEK('2015-01-20'), 'Wednesday'), '%X%V %W') Wed,
       STR_TO_DATE(CONCAT(EXTRACT(YEAR FROM '2015-01-20'), WEEK('2015-01-20'), 'Thursday'), '%X%V %W') Thur,
       STR_TO_DATE(CONCAT(EXTRACT(YEAR FROM '2015-01-20'), WEEK('2015-01-20'), 'Friday'), '%X%V %W') Fri,
       STR_TO_DATE(CONCAT(EXTRACT(YEAR FROM '2015-01-20'), WEEK('2015-01-20'), 'Saturday'), '%X%V %W') Sat,
       STR_TO_DATE(CONCAT(EXTRACT(YEAR FROM '2015-01-20'), WEEK('2015-01-20'), 'Sunday'), '%X%V %W') Sun;

我得到以下结果

YEAR WK_No Mon          Tues        Wed         Thur        Fri         Sat         Sun
2015 3     2015-01-19   2015-01-20  2015-01-21  2015-01-22  2015-01-23  2015-01-24  2015-01-18

本周从 18 日星期日开始

根据mysql帮助 http://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html#function_week

如果我将模式设置为 1、3、5、7,我的一周应该从星期一开始,但他们都没有这样做 如果我使用模式 1 或 3 例如模式 1

SELECT EXTRACT(YEAR FROM '2015-01-20') YEAR,
       WEEK('2015-01-20',1) WK_No ,
       STR_TO_DATE(CONCAT(EXTRACT(YEAR FROM '2015-01-20'), WEEK('2015-01-20',1), 'Monday'), '%X%V %W') Mon,
       STR_TO_DATE(CONCAT(EXTRACT(YEAR FROM '2015-01-20'), WEEK('2015-01-20',1), 'Tuesday'), '%X%V %W') Tues,
       STR_TO_DATE(CONCAT(EXTRACT(YEAR FROM '2015-01-20'), WEEK('2015-01-20',1), 'Wednesday'), '%X%V %W') Wed,
       STR_TO_DATE(CONCAT(EXTRACT(YEAR FROM '2015-01-20'), WEEK('2015-01-20',1), 'Thursday'), '%X%V %W') Thur,
       STR_TO_DATE(CONCAT(EXTRACT(YEAR FROM '2015-01-20'), WEEK('2015-01-20',1), 'Friday'), '%X%V %W') Fri,
       STR_TO_DATE(CONCAT(EXTRACT(YEAR FROM '2015-01-20'), WEEK('2015-01-20',1), 'Saturday'), '%X%V %W') Sat,
       STR_TO_DATE(CONCAT(EXTRACT(YEAR FROM '2015-01-20'), WEEK('2015-01-20',1), 'Sunday'), '%X%V %W') Sun;

我的结果大错特错,根本不正确

YEAR    WK_No   Mon         Tues        Wed         Thur        Fri         Sat         Sun
2015    4       2015-01-26  2015-01-27  2015-01-28  2015-01-29  2015-01-30  2015-01-31  2015-01-25

我得到的一周不包含日期,并且该周仍从星期日开始

如果我使用模式 5 或 7,例如模式 5

SELECT EXTRACT(YEAR FROM '2015-01-20') YEAR,
       WEEK('2015-01-20',5) WK_No ,
       STR_TO_DATE(CONCAT(EXTRACT(YEAR FROM '2015-01-20'), WEEK('2015-01-20',5), 'Monday'), '%X%V %W') Mon,
       STR_TO_DATE(CONCAT(EXTRACT(YEAR FROM '2015-01-20'), WEEK('2015-01-20',5), 'Tuesday'), '%X%V %W') Tues,
       STR_TO_DATE(CONCAT(EXTRACT(YEAR FROM '2015-01-20'), WEEK('2015-01-20',5), 'Wednesday'), '%X%V %W') Wed,
       STR_TO_DATE(CONCAT(EXTRACT(YEAR FROM '2015-01-20'), WEEK('2015-01-20',5), 'Thursday'), '%X%V %W') Thur,
       STR_TO_DATE(CONCAT(EXTRACT(YEAR FROM '2015-01-20'), WEEK('2015-01-20',5), 'Friday'), '%X%V %W') Fri,
       STR_TO_DATE(CONCAT(EXTRACT(YEAR FROM '2015-01-20'), WEEK('2015-01-20',5), 'Saturday'), '%X%V %W') Sat,
       STR_TO_DATE(CONCAT(EXTRACT(YEAR FROM '2015-01-20'), WEEK('2015-01-20',5), 'Sunday'), '%X%V %W') Sun;

我得到了与不使用模式选项相同的结果。

YEAR WK_No Mon          Tues        Wed         Thur        Fri         Sat         Sun
2015 3     2015-01-19   2015-01-20  2015-01-21  2015-01-22  2015-01-23  2015-01-24  2015-01-18

如何获取给定日期的一周开始日期和结束日期。 给定日期的那一周从星期一开始?

最佳答案

如果我理解正确的话,您希望分别找到您作为输入提供的日期的一周开始和结束日期,即星期一和星期日。

这比您现在尝试使用 DATE_ADD 和 SUBDATE 函数来完成要容易得多。

有关这些功能的更多信息,请查看 the documentation.

通过这些查询,您可以创建一个函数来为您处理这个问题。 DATE() 可能可以代替强制转换,我在家时会研究它。

本周的下一个周日:

SELECT CAST('2015-04-22' + INTERVAL (6-WEEKDAY('2015-04-22')) day AS DATE);

本周开始:

SELECT CAST(SUBDATE('2015-04-26', WEEKDAY('2015-04-26')) AS DATE);

编辑: react 有点太快,编辑了查询,周末可能有点过于复杂,我回家后会调查一下。

关于mysql - MySQL WEEK(date[,mode]); 如何执行工作还是我在这里做错了什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29774519/

相关文章:

mysql - 使用 shell 脚本在 MySQL 中创建表

php - 循环遍历二维 session 数组购物车php

php - 数据库连接不工作

mysql - 如何选择一个文本列,其中字符串长度> 0?

c# - jQuery - 如何正确显示两个日期之间的所有记录?

sql - 从两个日期之间的日期范围中选择数据

mysql - 如何在 mysql 中使用别名更新字段?

mysql - 奇怪的数据库行为

python - 如何解析没有日期的时间字符串和没有时间的日期字符串?

python - 使用 pandas DateTimeIndex 提取年份但出现错误