當月數據
創新互聯公司長期為成百上千客戶提供的網站建設服務,團隊從業經驗10年,關注不同地域、不同群體,并針對不同對象提供差異化的產品和服務;打造開放共贏平臺,與合作伙伴共同營造健康的互聯網生態環境。為榆社企業提供專業的網站設計、成都做網站,榆社網站改版等技術服務。擁有10年豐富建站經驗和眾多成功案例,為您定制開發。
select * from table t
where t.create_time
=TRUNC(SYSDATE, 'MM')
and
t.create_time=last_day(SYSDATE) create_time為你要查詢的時間
當年數據
select * from table t
where t.create_time
=trunc(sysdate,'YYYY')
and
t.create_time=add_months(trunc(sysdate,'YYYY'),12)-1
本周(國外周日為一個星期第一天)
where t.create_time =trunc(sysdate,'day')+1 and
t.create_time=trunc(sysdate,'day')+6 本周(國內周一為一個星期第一天)
where t.create_time =trunc(next_day(sysdate-8,1)+1) and
t.create_time=trunc(next_day(sysdate-8,1)+7)+1
select to_char(TO_DATE('20171123', 'YYYYMMDD'), 'yyyyiw') as week, --oracle求當年的第幾周
to_char(TO_DATE('20171123', 'YYYYMMDD'), 'yyyyww') as week2, --oracle求當年的第幾周
to_char(TO_DATE('20171123', 'YYYYMMDD'), 'yyyy') as year, --oracle求第幾年
to_char(TO_DATE('20171123', 'YYYYMMDD'), 'yyyymm') as month, --oracle求當年的第幾月
to_char(TO_DATE('20171123', 'YYYYMMDD'), 'yyyyddd') as day, --oracle求當年的第幾天
to_char(TO_DATE('20171123', 'YYYYMMDD'), 'yyyyq') as quarter -- oracle求當年的第幾季度
from dual
-----------
SELECT
to_char(sysdate,'day') 星期幾,
to_char(SYSDATE,'ddd') 第幾天,
to_char(SYSDATE,'ww') 第幾周,
to_char(SYSDATE,'mm') 第幾月,
to_char(SYSDATE,'q') 第幾季
FROM dual
最近遇到業務需求,需要按周統計數據。
思考再三想到可以使用每周周一來計算。
故寫出如下獲得系統當前月份所有周一的語句。
select * from (
--轉化成周一去重
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換成其它時間)
SELECT?TO_CHAR(ADD_MONTHS(SYSDATE,?-1),?'MM')?AS?上月,
TO_CHAR(SYSDATE,?'MM')?AS?本月,
TO_CHAR(ADD_MONTHS(SYSDATE,?1),?'MM')?AS?下月
FROM?DUAL
如果字符串只有開頭有零,而字符串中間沒有0,那么可以使用replace(字符串,'0','')
如果0開頭最長的位數不長,那么可以逐個判斷。
比如我可能知道這里面最長的就是連續5個0開頭的,這樣我就判斷如果遇到5個0開頭的就截掉前五位,4個0開頭截掉前四位,3個0開頭截掉前三位,一直到1,逐個判斷使用case when可以完成.但是如果最長的0開頭個數不確定,就比較麻煩了。