oracle取每月第几周问题
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了oracle取每月第几周问题相关的知识,希望对你有一定的参考价值。
以周日为第一天,周六为最后一天,比如这个月 5.1、5.2是第一周,5.3~5.9是第二周,oracle里要如何实现?求高手告知,谢谢!
参考技术A with t as(select date'2015-1-1'+level-1 as dt from dual connect by level<=365)select dt,to_char(dt,'w') as w,to_char(dt,'day') as d,
trunc((to_char(dt,'dd')+to_char(last_day(add_months(dt,-1)),'d')-1) /7) +1 as e from t;
希望这个能满足你的要求!本回答被提问者采纳 参考技术B oracle取每月第几周的方法:
sql语句写法有两种:
1、SELECT TO_CHAR(SYSDATE,'WW') - TO_CHAR(TRUNC(SYSDATE,'MM'),'WW') + 1 AS "weekOfMon" from dual;
2、SELECT TO_CHAR(SYSDATE,'W') AS "weekOfMon" from dual;
c#中计算当前时间是今年第几周 与ORACLE数据库中ww转化相同
为了在程序中生成的当前时间是第几周的判断结果与ORCAL中的相同。因为在做周报 ,周报统计的数据计算周数是数据库算的,列表页面又是C#定时任务。
原有的C#计算当前时间是第几周的方法是这样的
GregorianCalendar gc = new GregorianCalendar();
int weekOfYear = gc.GetWeekOfYear(DateTime.Now, CalendarWeekRule.FirstDay, DayOfWeek.Monday);
C#中是这样计算:
2022年1月1号是周六 是第一周 weekOfYear =1
2022年1月3号是周一 是第二周 weekOfYear =2
数据库中是这样计算
to_char(sysdate, 'WW')
to_char(sysdate, 'IW')
注意在这里进行一下区分IW WW两种格式
IW:
IW是指的自然周的计算方法
例如:
sysdate=2022年1月1号
2022年1月1号是周六 to_char(sysdate, ‘IW’)= 0
2022年1月3号是周一 to_char(sysdate+3, ‘IW’) =1
那么对于数据库来说第一周其实是1月3号那一周,它是以第一个周一来当第一个完整周。可想而知前面几天就丢掉了。
WW:
指的是2022年1月1号是周六 那么1月1号算第一周 1月8号是第二周
2022年1月1号是周六 to_char(sysdate, ‘WW’)= 1
2022年1月3号是周一 to_char(sysdate+3, ‘WW’) =1
2022年1月3号是周一 to_char(sysdate+7, ‘WW’) =2
为了在C#中能计算出的周数与数据库相同于是这样写:
思路梳理 :首先算出今天是今年的第几天 (下文代码中的yearcountday ) 再用yearcountday 除 7 取整数+1 就能得到与数据库中WW算法相同的周数
int yearcountday = 0;
int week = 0;
for (int i = 1; i <= DateTime.Now.Month; i++)
string day = DateTime.Now.Year.ToString() + "-" + (i + 1).ToString() + "-01";
DateTime dateTime = Convert.ToDateTime(day).AddDays(-1);
if (i == DateTime.Now.Month)
dateTime = DateTime.Now;
//dateTime.Day代表这个月有多少天
yearcountday += dateTime.Day;
week =( yearcountday / 7) +1;
以上是关于oracle取每月第几周问题的主要内容,如果未能解决你的问题,请参考以下文章
oracle用存储过程实现对输入的日期判断是属于一年中的第几周,如20120101~20120107是
c#中计算当前时间是今年第几周 与ORACLE数据库中ww转化相同