以星期,星期数,月和年获取日期
问题描述:
如果您只有MySQL的星期几,星期数,月和年,有某种方法可以获取日期?以星期,星期数,月和年获取日期
例子:
我想知道这一天是这个参数:
- 年时间:2014年
- 月:Setember(09)
- 年的周数:37或周数量在9月:3
- 星期几:星期四
答案是“2014-09-18”
答
我问了同样的问题,在葡萄牙斯托克溢出,他们找到了一个简单的解决方案。
使用str_to_date,年,星期数和星期几。
%Y Year, numeric, four digits
%U Week (00..53), where Sunday is the first day of the week
%W Weekday name (Sunday..Saturday)
SELECT str_to_date('201437 Thursday', '%Y%U %W');
结果:
2014-09-18 00:00:00
感谢大家谁帮我
答
使用Barmars建议你可以建立在运行一年的日历,并检查其对你的约束条件有关:
SET @year := 2014; -- set the year of the constraints
SET @week := 37; -- the week
SET @day_of_week := 5; -- the day of the week (numerical)
-- build the first of the wanted year as supposed by Barmar
SET @first_of_year = STR_TO_DATE(CONCAT(@year, '-01-01'), '%Y-%m-%d');
SELECT
@first_of_year + INTERVAL t.n DAY the_date
FROM (
SELECT
a.N + b.N * 10 + c.N * 100 AS n
FROM
(SELECT 0 AS N UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9) a
,(SELECT 0 AS N UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9) b
,(SELECT 0 AS N UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3) c
ORDER BY n
) t
WHERE
t.n < TIMESTAMPDIFF(DAY, @first_of_year, @first_of_year + INTERVAL 1 YEAR)
AND
WEEK(@first_of_year + INTERVAL t.n DAY) = @week
AND
DAYOFWEEK(@first_of_year + INTERVAL t.n DAY) = @day_of_week
;
注意
UNION生成从0到399的数字,所以我们可以生成一年的日历。现在我们可以应用您的其他约束,比如每周和每周的一周。
+0
我在这里测试,工作正常,但我找到了其他方式。非常感谢你! – brunodotcom 2014-09-18 19:41:22
他们是如何保存在你的MySQL数据库? – AndreDuarte 2014-09-18 17:58:38
所有的日期函数都在这里:http://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html没有内置的函数可以做到这一点,但你可以计算它通过'date_add( -01-01,INTERVAL WEEKS)开始' –
Barmar
2014-09-18 18:01:31
其实我按照星期编号进行了一个查询分组,并且按星期与列分隔,但现在我需要在Mysql中显示类似日历的内容,显示日子本身。 – brunodotcom 2014-09-18 18:19:39