測試, 這是測消息
1.按天
select to_char(t.STARTDATE+15/24, 'YYYY-MM-DD') as 天,sum(1) as 數量
from HOLIDAY t
group by to_char(t.STARTDATE+15/24, 'YYYY-MM-DD') --
ORDER by 天 NULLS LAST;
select trunc(t.STARTDATE, 'DD') as 天,sum(1) as 數量
from HOLIDAY t
group by trunc(t.STARTDATE, 'DD') --
ORDER by 天 NULLS LAST;
2.按周
select to_char(next_day(t.STARTDATE+15/24 - 7,2),'YYYY-MM-DD') AS 周,sum(1) as 數量
from HOLIDAY t
group by to_char(next_day(t.STARTDATE+15/24 - 7,2),'YYYY-MM-DD')ORDER BY 周;
-- 按自然周統計
select to_char(t.STARTDATE,'iw') AS 周,sum(1) as 數量
from HOLIDAY t
group by to_char(t.STARTDATE,'iw')
ORDER BY 周;
3.按自然月
select to_char(t.STARTDATE,'YYYY-MM') as 月份,sum(1) as 數量
from HOLIDAY t
GROUP BY
to_char(t.STARTDATE,'YYYY-MM')
ORDER BY 月份;
4.按季度
select to_char(t.STARTDATE,'q') 季度,sum(1) as 數量
from HOLIDAY t
group by to_char(t.STARTDATE,'q')
ORDER BY 季度 NULLS LAST;
5.按年
select to_char(t.STARTDATE,'yyyy') AS 年度,sum(1) as 數量
from HOLIDAY t
group by to_char(t.STARTDATE,'yyyy')
ORDER BY 年度;
6.ORACLE用GROUP BY 來分組日期字段 按月分組
SELECT to_char(日期字段,'yyyymm'),sum(*)
FROM [TableName]
group by to_char(日期字段,'yyyymm');
SELECT to_char(日期字段,'yyyymm'),sum(*)
FROM [TableName]
group by to_char(日期字段,'yyyymm');
7.oracle查詢七天數據,並且按日期分組
1、查從今天開始前七天日期
select to_char (sysdate- level + 1, 'yyyy-mm-dd') today FROM DUAL connect BY LEVEL <= 7
2、寫統計語句,將數量和日期查出來(這個分組統計自己寫)
3、用第一步和第二步兩張表做左關聯查詢 ,沒有的數量用0代替(剛好這幾天都有數據,沒有的會以0展示出來)
1) NVL函數
NVL(E1, E2)的功能爲:如果E1爲NULL,則函數返回E2,否則返回E1本身。但此函數有一定侷限,所以就有了NVL2函數。
拓展:NVL2函數:Oracle/PLSQL中的一個函數,Oracle在NVL函數的功能上擴展,提供了NVL2函數。NVL2(E1, E2, E3)的功能爲:如果E1爲NULL,則函數返回E3,若E1不爲null,則返回E2。
2)substr函數格式 (俗稱:字符截取函數)
格式1: substr(string string, int a, int b);
格式2: substr(string string, int a) ;
解釋:
格式1:
1、string 需要截取的字符串
2、a 截取字符串的開始位置(注:當a等於0或1時,都是從第一位開始截取)
3、b 要截取的字符串的長度
格式2:
1、string 需要截取的字符串
2、a 可以理解爲從第a個字符開始截取後面所有的字符串