根据周+ dayofweek mysql查找日期

时间:2014-05-19 13:33:42

标签: mysql sql date dayofweek

假设我知道DAYOFWEEK()的日期,并且我知道WEEK()YEAR()个数字。是否可以在 mysql 中格式化这些值的日期?

3 个答案:

答案 0 :(得分:1)

你走了:

SELECT STR_TO_DATE('2014-20-2','%Y-%U-%w')-INTERVAL 1 DAY n;
+------------+
| n          |
+------------+
| 2014-05-19 |
+------------+

INTERVAL位是为了说明%w将星期几解释为0(星期日)到6,而DAYOFWEEK从1(星期日)变为7 - 去数字!!!

%U也可能与WEEK()略有不同;以上似乎给出了正确答案,所以我没有进一步研究。

答案 1 :(得分:0)

我对sql并不擅长,所以我只会编写用于解决该问题的逻辑。

我们知道今年是什么(年())。我们可以使用1.1.1900的事实。是星期一,计算一周的哪一天是1.1。当年。然后我们可以计算当前周的哪些日期(WEEK())。再次使用1.1.1900的事实。星期一,我们可以计算出每周的哪一天,并将其与当前的一周(DAYOFWEEK())进行比较。

同样,我对sql并不擅长,所以这可能是非常低效的解决方案。但我希望这至少可以为您提供一些想法并帮助您找到解决方案。祝你好运。

答案 2 :(得分:0)

SELECT 
DATE_FORMAT(FROM_UNIXTIME(1400463204), '%Y-%m-%d 00:00:00') AS date,
STR_TO_DATE(DATE_FORMAT(FROM_UNIXTIME(1400463204), CONCAT(YEAR(FROM_UNIXTIME(1400463204)-INTERVAL 1 YEAR),'-','%U-%w')), '%Y-%U-%w %H:%i:s') AS samedaylastyear,
DAYOFWEEK(DATE_FORMAT(FROM_UNIXTIME(1400463204), '%Y-%m-%d 00:00:00')) AS check1,
DAYOFWEEK(STR_TO_DATE(DATE_FORMAT(FROM_UNIXTIME(1400463204), CONCAT(YEAR(FROM_UNIXTIME(1400463204)-INTERVAL 1 YEAR),'-','%U-%w')), '%Y-%U-%w %H:%i:s')) AS check2