我正在尝试查找一个月内所有周的开始日期和结束日期。 目前假设我有这个
MAR-17
APR-17
MAY-17
JUN-17
我想要
Month Week_start_date Week_start_date
MAR-17 06-MAR-17 12-MAR-17
MAR-17 13-MAR-17 19-MAR-17
MAR-17 20-MAR-17 26-MAR-17
MAR-17 27-MAR-17 02-APR-17
APR-17 03-APR-17 09-APR-17
APR-17 10-APR-17 16-APR-17
APR-17 17-APR-17 23-APR-17
APR-17 24-APR-17 30-APR-17
MAY-17 and so on
JUN-17
我试过了
select to_char(to_date('06-AUG-17' ), 'iw' )from dual ;
但它根据特定日期给出了week_start_date,但我想要每个月的week_start_date。 如果找到week_start_date,那么我只需添加+7即可获得week_end_date。 任何人都可以帮助我
先谢谢
答案 0 :(得分:1)
试试这个。在private long GetStakeholderId()
{
string currentUserId = _userManager.GetUserId(User);
long stakeholderId;
var users = _userManager.Users;
foreach (var user in users)
{
if (user.Email == currentUserId)
{
var idForStakeholder = user.Id;
var stakeholders = _context.Stakeholders;
foreach (var stakeholder in stakeholders)
{
if (stakeholder.IdentityId == idForStakeholder)
{
stakeholderId=stakeholder.StakeholderId;
return stakeholderId;
}
else
{
return 0;
}
}
}
return 0;
}
}
表中添加更多月份,或将其替换为您的实际表格。
我假设m
是varchar数据类型。如果没有,请在代码中将MAR-17
替换为to_date(mon,'MON-YY')
。
mon
说明:
SELECT mon,
TRUNC(to_date(mon,'MON-YY'), 'iw') + nxt AS iso_week_start_date ,
TRUNC(to_date(mon,'MON-YY'), 'iw') + 6 + nxt AS iso_week_end_date
FROM
(SELECT LEVEL*7 - 7 AS nxt
FROM dual CONNECT BY LEVEL <=6)
CROSS JOIN
(SELECT 'MAR-17' AS mon
FROM dual
UNION ALL SELECT 'APR-17'
FROM dual
UNION ALL SELECT 'MAY-17'
FROM dual
) m --Sample data. Replace with original table and change column mon to your `char` column.
WHERE --where clause to filter out of month dates.
to_date(mon,'MON-YY') <= TRUNC(to_date(mon,'MON-YY'), 'iw') + nxt --iso_week_start_date
AND last_day(to_date(mon,'MON-YY')) >= TRUNC(to_date(mon,'MON-YY'), 'iw') + nxt --iso_week_start_date
ORDER BY 2
返回给定日期的星期几(星期一)的第一天。
(选择级别* 7 - 7作为nxt从双级连接按级别&lt; = 6)它会 生成列的范围为0,7,14,21,28,35。后交叉连接它每月乘以6次,产生6个不同的星期。
在第一周添加select TRUNC (sysdate, 'IW') from dual
时使用此功能。
Where子句用于过滤days
个日期。
答案 1 :(得分:0)
您可以使用以下内容:
SELECT DISTINCT day_of_month Week_start_date, day_of_month + 6 week_end_Date
FROM
(SELECT TRUNC (TO_DATE ('01/01/2017', 'dd/mm/yyyy'), 'Day') + 1 day_of_month
FROM DUAL
UNION ALL
SELECT TRUNC (TO_DATE ('01/01/2017', 'dd/mm/yyyy') + LEVEL,'Day')+ 1 day_of_month
FROM DUAL
CONNECT BY LEVEL <= 365)
ORDER BY day_of_month;
<强>解释强>
假设:
每月的第一天是星期一
1 SELECT DISTINCT day_of_month Week_start_date, day_of_month + 6
week_end_Date
2 FROM
3 (SELECT TRUNC (TO_DATE ('01/01/2017', 'dd/mm/yyyy'), 'Day') + 1 day_of_month
FROM DUAL
4 UNION ALL
5 SELECT TRUNC (TO_DATE ('01/01/2017', 'dd/mm/yyyy') + LEVEL,'Day')+ 1 day_of_month
FROM DUAL
6 CONNECT BY LEVEL <= 365)
7 ORDER BY day_of_month;
第5-6行:
生成2017年1月1日至2017年12月31日期间的所有日期 年使用Connect by Level子句。
对于生成的日期,使用带有'Day'fmt过滤器的TRUNC功能查找一周的第一天。
由于TRUNC函数将星期日作为星期的开始,因此将其加1以获得与星期一相对应的日期。有了这个,我们将获得除2017年1月1日之外的所有日期的星期一日期。
第3行
获取与2017年1月1日相对应的星期一日期
第1行