我有一个表,其中包含字符串和数字中的周数。我想把数和一周,然后得到下一周。
例如,tableA
week num
2022-1 1
2022-3 3输出
week num new_week
2022-1 1 2022-2
2022-3 3 2022-6
2022-52 2 2023-2因此,我将周转换为日期,将周添加到日期,最后将日期转换回周。然而,当我努力工作到每周,我有问题。下面的SQL是我正在使用的
CONCAT(YEAR(DATEADD('week', num, date)), WEEK(DATEADD('week', num, date)))我不使用日历年。由于我的一周从每年的第一个星期五开始,计算是不正确的。是否有可能避免将一周改为日期和日期改为一周?
发布于 2022-09-23 11:39:37
我写了一个小小的JS来做你的“一周”数学。如果12月31日是星期四,那一年就有53周了。好消息是,你不需要把你的“年度周”转换成日期。
create or replace function addweeks( spcweek VARCHAR, num VARCHAR ) returns VARCHAR
LANGUAGE JAVASCRIPT
AS
$$
year = parseInt(SPCWEEK.substring( 0, 4 ));
week = parseInt(SPCWEEK.substring( 5 ));
week = week + parseInt(NUM);
weekinyear = (new Date(year, 11, 31).getDay() == 4 ? 53 : 52);
while (week > weekinyear ) {
week = week - weekinyear;
weekinyear = (new Date(year, 11, 31).getDay() == 4 ? 53 : 52);
year ++;
}
return year + "-" + week;
$$
;
select myweek, num, addweeks( myweek, num) new_week
from mydata;
+---------+-----+----------+
| MYWEEK | NUM | NEW_WEEK |
+---------+-----+----------+
| 2022-1 | 1 | 2022-2 |
| 2022-3 | 3 | 2022-6 |
| 2022-52 | 2 | 2023-2 |
| 2020-52 | 2 | 2021-1 |
+---------+-----+----------+我认为如果在计算一年中的总周数时有错误,你可以纠正我的逻辑。
发布于 2022-09-23 09:24:26
只要稍微摆弄一下字符串,你就可以像这样计算。
SELECT week, num, CONCAT( SUBSTRING(week FROM 1 for 5), num + SUBSTRING(week FROM INSTR(week, '-')+1))
FROM table;https://stackoverflow.com/questions/73825473
复制相似问题