十年網(wǎng)站開發(fā)經(jīng)驗(yàn) + 多家企業(yè)客戶 + 靠譜的建站團(tuán)隊(duì)
量身定制 + 運(yùn)營(yíng)維護(hù)+專業(yè)推廣+無憂售后,網(wǎng)站問題一站解決
1、首先可以直接用datepart函數(shù),第一個(gè)參數(shù)設(shè)置成weekday就可以了。
在西峽等地區(qū),都構(gòu)建了全面的區(qū)域性戰(zhàn)略布局,加強(qiáng)發(fā)展的系統(tǒng)性、市場(chǎng)前瞻性、產(chǎn)品創(chuàng)新能力,以專注、極致的服務(wù)理念,為客戶提供成都網(wǎng)站建設(shè)、成都網(wǎng)站制作 網(wǎng)站設(shè)計(jì)制作定制網(wǎng)站建設(shè),公司網(wǎng)站建設(shè),企業(yè)網(wǎng)站建設(shè),品牌網(wǎng)站制作,成都全網(wǎng)營(yíng)銷,成都外貿(mào)網(wǎng)站制作,西峽網(wǎng)站建設(shè)費(fèi)用合理。
2、得到的結(jié)果是這一天是這周的第幾天,注意星期日是第一天。
3、可以看到去掉星期日就是日期的星期幾了。
4、然后在實(shí)際使用的時(shí)候就可以直接減去1就可以了。
5、另外datepart第二個(gè)參數(shù)也可以直接放getdate。
6、最后得到的結(jié)果也是需要的日期。
最近遇到業(yè)務(wù)需求,需要按周統(tǒng)計(jì)數(shù)據(jù)。
思考再三想到可以使用每周周一來計(jì)算。
故寫出如下獲得系統(tǒng)當(dāng)前月份所有周一的語句。
select * from (
--轉(zhuǎn)化成周一去重
select distinct trunc(t.day,'iw') as mon from (
--獲取本月所有日期集合
SELECT trunc(sysdate, 'mm') + LEVEL - 1 DAY
FROM DUAL
CONNECT BY trunc(sysdate, 'mm') + LEVEL - 1 =
last_day(trunc(sysdate))
)t
)a
--移除非本月的周一
where trunc(a.mon, 'mm') =? trunc(sysdate, 'mm')
ORDER BY MON
注:
trunc(sysdate,'iw') 語句可以獲取本周周一的日期 (date類型)
trunc(sysdate,'iw') +1 可以獲取本周周二的日期。
以此類推
(可以把sysdate換成其它時(shí)間)
--1、取某天在本周中的第幾天(默認(rèn)周日開始算第1天)
select to_char(to_date('2011-04-11','yyyy-mm-dd'), 'd') from dual;
--2、如果要從周一開始算第1天,需要做一些手腳
--大概思路是:1變成7,2變成1,3變成2......,7變成6
select decode(to_char(to_date('2011-04-04', 'yyyy-mm-dd'), 'd'),
1,
7,
to_char(to_date('2011-04-04', 'yyyy-mm-dd'), 'd') - 1)
from dual;
--3、再根據(jù)上面的結(jié)論倒推到上周時(shí)間
select to_date('2011-04-04', 'yyyy-mm-dd') -
decode(to_char(to_date('2011-04-04', 'yyyy-mm-dd'), 'd'),
1,
7,
to_char(to_date('2011-04-04', 'yyyy-mm-dd'), 'd') - 1) - 7 + 1,
to_date('2011-04-04', 'yyyy-mm-dd') -
decode(to_char(to_date('2011-04-04', 'yyyy-mm-dd'), 'd'),
1,
7,
to_char(to_date('2011-04-04', 'yyyy-mm-dd'), 'd') - 1) - 7 + 1 + 6
from dual;
SQL?select?
2????CASE?
3??????WHEN?TO_CHAR(to_date('201207','yyyymm'),?'D')?=?'1'?
4????????THEN?to_date('201207','yyyymm')
5??????ELSE
6????????next_day(to_date('201207','yyyymm'),'星期日')?
7??????END??AS??"第一個(gè)星期日"
8??from?
9????dual;
第一個(gè)星期
----------
2012-07-01
SQL?
SQL?select?
2????CASE?
3??????WHEN?TO_CHAR(to_date('201208','yyyymm'),?'D')?=?'1'?
4????????THEN?to_date('201208','yyyymm')
5??????ELSE
6????????next_day(to_date('201208','yyyymm'),'星期日')?
7??????END??AS??"第一個(gè)星期日"
8??from?
9????dual;
第一個(gè)星期
----------
2012-08-05
CASE ?WHEN ?主要為了解決 ?當(dāng)月1號(hào), 剛好是星期日的 ?特殊情況!!!
select b.day,b.dd,sum(b.flag) over(partition by b.dd) as dd_sum
from
(select a.day,to_char(a.day,'day') as dd, 1 as flag
from
(SELECT TO_DATE('20130118', 'YYYY-MM-DD') + LEVEL - 1 DAY
FROM DUAL
CONNECT BY TO_DATE('20130118', 'YYYY-MM-DD') + LEVEL - 1 =
TO_DATE('20130209', 'YYYY-MM-DD')
) a
) b
group by b.day