select week('2017-01-01', 3)
得到:52
weeknum("2017-01-01",2) 得到:1
每一年的第一天,都是第一周,这个逻辑是否可以在 mysql 中实现呢?
突然发现,python 中 datetime.date(2017, 1,1).isocalendar()[1],得到的也是 52
蒙圈了。。。请各位大 V 指教
1
l00t 2017-11-10 17:54:05 +08:00 1
ISOCalendar 看周四的。周四在上一年,这周就算上一年的。周四在这一年,这周就算这一年的。
|
3
ping2 2017-11-10 20:37:01 +08:00 1
|
5
nekuata 2017-11-10 21:10:57 +08:00 1
select week(date_add('2017-1-1',interval 7 day),3);
手动加一周 /滑稽 |
7
ping2 2017-11-10 21:14:35 +08:00 1
@wisefree
> select week('2017-01-01', 2)\G *************************** 1. row *************************** week('2017-01-01', 2): 1 1 row in set (0.00 sec) |
8
nekuata 2017-11-10 22:00:21 +08:00 1
@wisefree 加上三目..if 语句大概可以吧 /认真脸
select if(weekday('2017-01-01') <> 0, week(date_add('2017-1-1', INTERVAL 7 DAY), 3), week('2017-01-01', 3)); |
9
wisefree OP |
11
ping2 2017-11-10 23:49:41 +08:00 1
@wisefree 你说的那种肯定不对的,因为那样 W1 必然会有七天以上,那样就违背了 week num 的定义。mysql 文档上说得很清楚,你要不选择一种 mode 把指定开头的几天是 W0。
|
12
wisefree OP @ping2 谢谢啦,我仔细看了下 mysql 文档
如果我想得到每一年第一天是第 1 周的效果,必须到日历上看看这一年第一天是星期几,然后选择想要的 mode 其实在 excel 中,并不需要这么复杂 每一年的第一天,肯定是第 1 周,所以我想要 excel weeknum 函数的效果 每一年的第一天,是第一周,每一年的第一天直至最近的星期天都是第一周,这更方便。 |
13
ping2 2017-11-11 14:01:34 +08:00 1
|
14
wisefree OP |
15
wisefree OP |
17
wisefree OP @ping2 select week('2014-01-01',3), week('2014-01-06',3),week('2014-01-13',3),是我想要的结果
但是如果换成 2017 年,这个有问题了,所以每一年的 mode 必须重新考虑选择 这一点让人有点苦恼。excel weeknum(ex_date, 2)是我需要的返回值 |