sql把一段时间分割成周,月,季度,年的时间段
--本周
select TO_CHAR(CREATE_DATE ,'yyyy-MM-dd')as NEW_DATE ,
TO_CHAR(trunc(CREATE_DATE, 'd')+ 1,'yyyy-MM-dd') as START_DATE ,
TO_CHAR(trunc(CREATE_DATE, 'd')+ 7,'yyyy-MM-dd') as END_DATE
from BG_PROJECT_INFO;
--本月
select TO_CHAR(CREATE_DATE ,'yyyy-MM-dd')as NEW_DATE ,
TO_CHAR(trunc(CREATE_DATE, 'mm'),'yyyy-MM-dd') as START_DATE ,
TO_CHAR(last_day(trunc(CREATE_DATE, 'mm')),'yyyy-MM-dd') as END_DATE
from BG_PROJECT_INFO;
--本季
select TO_CHAR(CREATE_DATE ,'yyyy-MM-dd')as NEW_DATE ,
TO_CHAR(trunc(CREATE_DATE, 'Q'),'yyyy-MM-dd') as START_DATE ,
TO_CHAR(add_months(trunc(CREATE_DATE, 'Q'),3)-1,'yyyy-MM-dd') as END_DATE
from BG_PROJECT_INFO;
--本年
select TO_CHAR(CREATE_DATE ,'yyyy-MM-dd')as NEW_DATE ,
TO_CHAR(trunc(CREATE_DATE, 'yyyy'),'yyyy-MM-dd') as START_DATE ,
TO_CHAR(add_months(trunc(CREATE_DATE, 'yyyy'),12)-1,'yyyy-MM-dd') as END_DATE
from BG_PROJECT_INFO; select to_char(t.CREATE_DATE, 'YYYY-MM-DD') as 天, t.PLAN_HOURS
from BG_PROJECT_INFO t ---按天统计
select to_char(t.CREATE_DATE+15/24, 'YYYY-MM-DD') as 天 ,sum(t.PLAN_HOURS) as 数量
from BG_PROJECT_INFO t
WHERE
1=1
group by to_char(t.CREATE_DATE+15/24, 'YYYY-MM-DD')
ORDER by 天 NULLS LAST; --按周统计
select to_char(next_day(t.CREATE_DATE+15/24 - 7,2),'YYYY-MM-DD') AS 周,sum(t.PLAN_HOURS) as 数量
from BG_PROJECT_INFO t
WHERE
1=1
group by to_char(next_day(t.CREATE_DATE+15/24 - 7,2),'YYYY-MM-DD')
ORDER BY 周; --按月统计
select to_char(t.CREATE_DATE,'YYYY-MM') as 月份,sum(t.PLAN_HOURS) as 数量
from BG_PROJECT_INFO t
WHERE
1=1
GROUP BY
to_char(t.CREATE_DATE,'YYYY-MM')
ORDER BY 月份; -- 按季统计
select to_char(t.CREATE_DATE,'q') 季度,sum(t.PLAN_HOURS) as 数量
from BG_PROJECT_INFO t
WHERE
1=1
group by to_char(t.CREATE_DATE,'q')
ORDER BY 季度 NULLS LAST; --按年统计
select to_char(t.CREATE_DATE,'yyyy') AS 年度,sum(t.PLAN_HOURS) as 数量
from BG_PROJECT_INFO t
WHERE
1=1
group by to_char(t.CREATE_DATE,'yyyy')
ORDER BY 年度; --按照周一到周日为一周算周的开始时间和结束时间(IW)自然周
WITH PARAMS AS (SELECT TRUNC(TO_DATE('2009-01-01','YYYY-MM-DD'),'YYYY') AS SD FROM DUAL)
SELECT LEVEL 周次,
DECODE(SIGN(5-DECODE(TO_CHAR(PM.SD,'D'),'','',TO_CHAR(PM.SD,'D'))),-1,
NEXT_DAY(PM.SD+(LEVEL-1)*7,2),NEXT_DAY(PM.SD+(LEVEL-1)*7-7,2))
当周第一天,
DECODE(SIGN(5-DECODE(TO_CHAR(PM.SD,'D'),'','',TO_CHAR(PM.SD,'D'))),-1,
NEXT_DAY(PM.SD+(LEVEL-1)*7,2),NEXT_DAY(PM.SD+(LEVEL-1)*7-7,2)) + 6
当周最后一天
FROM DUAL D
LEFT JOIN PARAMS PM ON 1=1
CONNECT BY LEVEL<=53
--按照周日到周六为一周算周的开始时间和结束时间(D)
SELECT LEVEL 周次,(TRUNC(TO_DATE('2011-01-01','YYYY-MM-DD'),'YYYY')-7) + (7-TO_CHAR(TRUNC(TO_DATE('2011-01-01','YYYY-MM-DD'),'YYYY'),'D')+1)+(LEVEL-1)*7 当周第一天,
(TRUNC(TO_DATE('2011-01-01','YYYY-MM-DD'),'YYYY')-7) + (7-TO_CHAR(TRUNC(TO_DATE('2011-01-01','YYYY-MM-DD'),'YYYY'),'D')+1)+(LEVEL-1)*7+6 当周最后一天
FROM DUAL CONNECT BY LEVEL<=53
--按照ORACLE标准(WW)
SELECT LEVEL 周次,TO_DATE('2013-01-01','YYYY-MM-DD')+(LEVEL-1)*7 当周第一天,
TO_DATE('2013-01-01','YYYY-MM-DD')+(LEVEL-1)*7+
DECODE((TO_CHAR(TO_DATE('2013-12-31','YYYY-MM-DD'),'DDD')-(LEVEL-1)*7),1,0,2,1,6) 当周最后一天
FROM DUAL CONNECT BY LEVEL<=53 WITH src
AS (SELECT TRUNC (DATE '2018-08-01') fromdate,
TRUNC (DATE '2019-09-01') todate
FROM DUAL),
dataset
AS ( SELECT LEVEL AS seq
FROM DUAL
CONNECT BY LEVEL < (SELECT todate - fromdate FROM src)),
datawithindices
AS (SELECT src.*,
dataset.*,
CASE TO_CHAR (fromdate + seq - 1, 'DY')
WHEN 'SAT' THEN 1
WHEN 'SUN' THEN 2
WHEN 'MON' THEN 3
WHEN 'TUE' THEN 4
WHEN 'WED' THEN 5
WHEN 'THU' THEN 6
WHEN 'FRI' THEN 7
END
indice
FROM src, dataset),
filt
AS (SELECT seq, fromdate + seq - 1 nowaday, indice FROM datawithindices),
alldata
AS (SELECT filt.*, CEIL (indice / 7) + FLOOR (seq / 7) weekno FROM filt)
SELECT 'WEEK '||weekno week_seq, begindate, enddate
FROM (SELECT weekno,
FIRST_VALUE (nowaday)
OVER (PARTITION BY weekno ORDER BY weekno)
begindate,
LAST_VALUE (nowaday)
OVER (PARTITION BY weekno ORDER BY weekno)
enddate,
ROW_NUMBER () OVER (PARTITION BY weekno ORDER BY weekno) rn
FROM alldata)
WHERE rn = 1
SQL ----周
-----周
SELECT NUMS ,
(case when TO_DATE(WEEK_START_DATE, 'yyyy-mm-dd') < TO_DATE('2018-08-01', 'yyyy-mm-dd') then '2018-08-01' else WEEK_START_DATE end) as WEEKS_START_DATE ,
(case when TO_DATE(WEEK_END_DATE, 'yyyy-mm-dd') > TO_DATE('2018-09-15', 'yyyy-mm-dd') then '2018-09-15' else WEEK_END_DATE end) as WEEK_END_DATE from (
SELECT ROWNUM as NUMS,WEEK_START_DATE,WEEK_END_DATE from(
select WEEK_START_DATE, WEEK_END_DATE from (
select
ROWNUM as NUM,
to_char(日期,'yyyy-mm-dd') DATE_ID,
to_char(日期,'yyyy') YEAR_ID,
to_char(日期,'q') QUARTERID_ID,
to_char(日期,'mm') MONTH_ID,
TO_CHAR(trunc(日期, 'd')+ ,'yyyy-MM-dd') as WEEK_START_DATE ,
TO_CHAR(trunc(日期, 'd')+ ,'yyyy-MM-dd') as WEEK_END_DATE,
TO_CHAR(trunc(日期, 'mm'),'yyyy-MM-dd') as MONTH_START_DATE ,
TO_CHAR(last_day(trunc(日期, 'mm')),'yyyy-MM-dd') as MONTH_END_DATE,
TO_CHAR(trunc(日期, 'Q'),'yyyy-MM-dd') as QUARTERID_START_DATE ,
TO_CHAR(add_months(trunc(日期, 'Q'),)-,'yyyy-MM-dd') as QUARTERID_END_DATE,
TO_CHAR(trunc(日期, 'yyyy'),'yyyy-MM-dd') as YEAR_START_DATE ,
TO_CHAR(add_months(trunc(日期, 'yyyy'),)-,'yyyy-MM-dd') as YEAR_END_DATE
from(
select to_date('2018-08-01','yyyy-mm-dd')+(rownum-) 日期
from ALL_OBJECTS
where rownum< and to_date('2018-08-01','yyyy-mm-dd')+(rownum-)<=to_date('2018-09-15','yyyy-mm-dd')
)
) WHERE
=
GROUP BY WEEK_START_DATE,WEEK_END_DATE
ORDER BY WEEK_START_DATE
)
)
SQL ----月
-----月
SELECT NUMS ,
(case when TO_DATE(MONTH_START_DATE, 'yyyy-mm-dd') < TO_DATE('2018-08-01', 'yyyy-mm-dd') then '2018-08-01' else MONTH_START_DATE end) as MONTH_START_DATE ,
(case when TO_DATE(MONTH_END_DATE, 'yyyy-mm-dd') > TO_DATE('2018-09-15', 'yyyy-mm-dd') then '2018-09-15' else MONTH_END_DATE end) as MONTH_END_DATE from (
SELECT ROWNUM as NUMS,MONTH_START_DATE,MONTH_END_DATE from(
select MONTH_START_DATE, MONTH_END_DATE from (
select
ROWNUM as NUM,
to_char(日期,'yyyy-mm-dd') DATE_ID,
to_char(日期,'yyyy') YEAR_ID,
to_char(日期,'q') QUARTERID_ID,
to_char(日期,'mm') MONTH_ID,
TO_CHAR(trunc(日期, 'd')+ ,'yyyy-MM-dd') as WEEK_START_DATE ,
TO_CHAR(trunc(日期, 'd')+ ,'yyyy-MM-dd') as WEEK_END_DATE,
TO_CHAR(trunc(日期, 'mm'),'yyyy-MM-dd') as MONTH_START_DATE ,
TO_CHAR(last_day(trunc(日期, 'mm')),'yyyy-MM-dd') as MONTH_END_DATE,
TO_CHAR(trunc(日期, 'Q'),'yyyy-MM-dd') as QUARTERID_START_DATE ,
TO_CHAR(add_months(trunc(日期, 'Q'),)-,'yyyy-MM-dd') as QUARTERID_END_DATE,
TO_CHAR(trunc(日期, 'yyyy'),'yyyy-MM-dd') as YEAR_START_DATE ,
TO_CHAR(add_months(trunc(日期, 'yyyy'),)-,'yyyy-MM-dd') as YEAR_END_DATE
from(
select to_date('2018-08-01','yyyy-mm-dd')+(rownum-) 日期
from ALL_OBJECTS
where rownum< and to_date('2018-08-01','yyyy-mm-dd')+(rownum-)<=to_date('2018-09-15','yyyy-mm-dd')
)
) WHERE
=
GROUP BY MONTH_START_DATE,MONTH_END_DATE
ORDER BY MONTH_START_DATE
)
)
SQL ----季节
SELECT NUMS ,
(case when TO_DATE(QUARTERID_START_DATE, 'yyyy-mm-dd') < TO_DATE('2018-08-01', 'yyyy-mm-dd') then '2018-08-01' else QUARTERID_START_DATE end) as QUARTERID_START_DATE ,
(case when TO_DATE(QUARTERID_END_DATE, 'yyyy-mm-dd') > TO_DATE('2019-09-15', 'yyyy-mm-dd') then '2019-09-15' else QUARTERID_END_DATE end) as QUARTERID_END_DATE from (
SELECT ROWNUM as NUMS,QUARTERID_START_DATE,QUARTERID_END_DATE from(
select QUARTERID_START_DATE, QUARTERID_END_DATE from (
select
ROWNUM as NUM,
to_char(日期,'yyyy-mm-dd') DATE_ID,
to_char(日期,'yyyy') YEAR_ID,
to_char(日期,'q') QUARTERID_ID,
to_char(日期,'mm') MONTH_ID,
TO_CHAR(trunc(日期, 'd')+ ,'yyyy-MM-dd') as WEEK_START_DATE ,
TO_CHAR(trunc(日期, 'd')+ ,'yyyy-MM-dd') as WEEK_END_DATE,
TO_CHAR(trunc(日期, 'mm'),'yyyy-MM-dd') as MONTH_START_DATE ,
TO_CHAR(last_day(trunc(日期, 'mm')),'yyyy-MM-dd') as MONTH_END_DATE,
TO_CHAR(trunc(日期, 'Q'),'yyyy-MM-dd') as QUARTERID_START_DATE ,
TO_CHAR(add_months(trunc(日期, 'Q'),)-,'yyyy-MM-dd') as QUARTERID_END_DATE,
TO_CHAR(trunc(日期, 'yyyy'),'yyyy-MM-dd') as YEAR_START_DATE ,
TO_CHAR(add_months(trunc(日期, 'yyyy'),)-,'yyyy-MM-dd') as YEAR_END_DATE
from(
select to_date('2018-08-01','yyyy-mm-dd')+(rownum-) 日期
from ALL_OBJECTS
where rownum< and to_date('2018-08-01','yyyy-mm-dd')+(rownum-)<=to_date('2019-09-15','yyyy-mm-dd')
)
) WHERE
=
GROUP BY QUARTERID_START_DATE,QUARTERID_END_DATE
ORDER BY QUARTERID_START_DATE
)
)
SQL ----年
-----年
SELECT NUMS ,
(case when TO_DATE(YEAR_START_DATE, 'yyyy-mm-dd') < TO_DATE('2018-08-01', 'yyyy-mm-dd') then '2018-08-01' else YEAR_START_DATE end) as YEAR_START_DATE ,
(case when TO_DATE(YEAR_END_DATE, 'yyyy-mm-dd') > TO_DATE('2019-09-15', 'yyyy-mm-dd') then '2019-09-15' else YEAR_END_DATE end) as YEAR_END_DATE from (
SELECT ROWNUM as NUMS,YEAR_START_DATE,YEAR_END_DATE from(
select YEAR_START_DATE, YEAR_END_DATE from (
select
ROWNUM as NUM,
to_char(日期,'yyyy-mm-dd') DATE_ID,
to_char(日期,'yyyy') YEAR_ID,
to_char(日期,'q') QUARTERID_ID,
to_char(日期,'mm') MONTH_ID,
TO_CHAR(trunc(日期, 'd')+ ,'yyyy-MM-dd') as WEEK_START_DATE ,
TO_CHAR(trunc(日期, 'd')+ ,'yyyy-MM-dd') as WEEK_END_DATE,
TO_CHAR(trunc(日期, 'mm'),'yyyy-MM-dd') as MONTH_START_DATE ,
TO_CHAR(last_day(trunc(日期, 'mm')),'yyyy-MM-dd') as MONTH_END_DATE,
TO_CHAR(trunc(日期, 'Q'),'yyyy-MM-dd') as QUARTERID_START_DATE ,
TO_CHAR(add_months(trunc(日期, 'Q'),)-,'yyyy-MM-dd') as QUARTERID_END_DATE,
TO_CHAR(trunc(日期, 'yyyy'),'yyyy-MM-dd') as YEAR_START_DATE ,
TO_CHAR(add_months(trunc(日期, 'yyyy'),)-,'yyyy-MM-dd') as YEAR_END_DATE
from(
select to_date('2018-08-01','yyyy-mm-dd')+(rownum-) 日期
from ALL_OBJECTS
where rownum< and to_date('2018-08-01','yyyy-mm-dd')+(rownum-)<=to_date('2019-09-15','yyyy-mm-dd')
)
) WHERE
=
GROUP BY YEAR_START_DATE,YEAR_END_DATE
ORDER BY YEAR_START_DATE
)
)
sql把一段时间分割成周,月,季度,年的时间段的更多相关文章
- PL/SQL Developer 一段时间后变慢,且导致数据库CPU100%的问题(转)
参考: 一段时间不用plsql developer之后重新使用会变得很慢 plsql developer连接数据库导致服务器cpu升高的案例 1.pl/sql dev 变慢的问题,建议设置如下 2. ...
- java把一段时间分成周,月,季度,年的时间段
package com.mq.test.activeMQ; import java.text.DateFormat; import java.text.ParseException; import j ...
- sql 循环某段时间的每一天
create table #t1( 日期 datetime) declare @stime datetime;declare @etime datetime set @stime ='2015-01- ...
- sql 通过某段时间求得改段时间内的工作时长,排除工作日
CREATE FUNCTION Fun_GetTotalHourBySomeTime(@TaskId NVARCHAR(30),@Bu_trupstartDate NVARCHAR(50),@Bu_t ...
- 如何在Sql Server中读取最近一段时间的记录,比如取最近3天的或最近3个月的记录。
如何在Sql Server中读取最近一段时间的记录,比如取最近3天的或最近3个月的记录. 主要用到DATEADD函数,下面是详细语句 取最近3天 select * from 表名where rq> ...
- SQL Server日期和时间的格式
在SQL Server数据库中,SQL Server日期时间格式转换字符串可以改变SQL Server日期和时间的格式,是每个SQL数据库用户都应该掌握的.本文我们主要就介绍一下SQL Server日 ...
- ylb:SQL Server中的时间函数
ylbtech-SQL Server:SQL Server-SQL Server中的时间函数 SQL Server中的时间函数. 1,SQL Server中的时间函数 返回顶部 1. 当前系统日期 ...
- js 将一大段时间均分为很多个小时间段
最近写项目,遇到一个将选中时间段平均分割为若干小段,然后根据小段时间在数据库查询求均值的问题,后台大哥犯懒,非说后台做不了,让我分好传给他ヾ(. ̄□ ̄)ツ゜゜゜好气呦,但还要保持微笑,我就是这么懂礼貌 ...
- Sql Server中日期时间格式化为字符串输出
在SQL Server数据库中,SQL Server日期时间格式转换字符串可以改变SQL Server日期和时间的格式,是每个SQL数据库用户都应该掌握的.本文我们主要就介绍一下SQL Server日 ...
随机推荐
- 空格 ACSII码 160 32
ascii160和ascii32都表示空格,但是在IE里,160就不是显示空格,firefox里会显示空格,32不管是firefox里,还是IE里都显示空格.
- 安装多个ORACLE导致多个Oracle HOME的情况!
Oracle由于版本的不同,在注册表中产生的注册表信息也有所不同,但主要的键值信息还是一样的,例如Oracle10g比oracle9i在注册表中表现的更为“简洁”,在未知的情况下,获取Oracle10 ...
- location(重定向,跳转到其他网页)
<?php header('Location : https://www.baidu.com'); 这里是在响应头中添加一个 location 的头信息 客户端浏览器在接收到这个头信息过后会自动 ...
- (๑•̀ㅂ•́)و✧QQ用户信息管理系统
这是第二篇文章,就直接切主题 这次剖析的也是自己的作业之一:QQ信息管理系统 一:(此处省略了建Proarams类,其实目的只是想强调把连接语句单独放一个类里更容易调用,命名规范如图) 二:(导入SQ ...
- Vagrant box 增加磁盘容量方法
一直以来都是以vagrant+docker作为开发环境,可是久而久之,原Box自带的8G容量就捉襟见肘了.时不时需要手动删除一些东西. Virtualbox 本身只支持vdi硬盘文件格式的扩容,对vm ...
- MySql学习笔记【三、表相关操作】
创建表 CREATE TABLE [IF NOT EXISTS] table_name( column_name data_type, ... ) 如: CREATE TABLE test_table ...
- 关于php 7.4编译安装
一个不错的文章 https://hqidi.com/150.html 贴个地址就好啦, 借鉴了一把,很良心
- NORDIC 出现NRF_ERROR_NO_MEM错误
Which SDK version are you using, is it SDK v12.x.x? Which function returns NRF_ERROR_NO_MEM? Is it s ...
- kubernetes管理机密信息
一.启动应用安全信息的保护: Secret介绍: 应用启动过程中可能需要一些敏感信息,比如访问数据库的用户名密码或者秘钥.将这些信息直接保存在容器镜像中显然不妥,Kubernetes 提供的解决方案是 ...
- Linux终端命令行的快捷键
涉及在Linux命令行下进行快速移动光标.命令编辑.编辑后执行历史命令.Bang(!)命令.控制命令等.让basher更有效率. • 常用 1.ctrl+左右键:在单词之间跳转 2.ctrl+a:跳到 ...