--本周
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把一段时间分割成周,月,季度,年的时间段的更多相关文章

  1. PL/SQL Developer 一段时间后变慢,且导致数据库CPU100%的问题(转)

    参考: 一段时间不用plsql developer之后重新使用会变得很慢 plsql developer连接数据库导致服务器cpu升高的案例 1.pl/sql dev 变慢的问题,建议设置如下 2. ...

  2. java把一段时间分成周,月,季度,年的时间段

    package com.mq.test.activeMQ; import java.text.DateFormat; import java.text.ParseException; import j ...

  3. sql 循环某段时间的每一天

    create table #t1( 日期 datetime) declare @stime datetime;declare @etime datetime set @stime ='2015-01- ...

  4. sql 通过某段时间求得改段时间内的工作时长,排除工作日

    CREATE FUNCTION Fun_GetTotalHourBySomeTime(@TaskId NVARCHAR(30),@Bu_trupstartDate NVARCHAR(50),@Bu_t ...

  5. 如何在Sql Server中读取最近一段时间的记录,比如取最近3天的或最近3个月的记录。

    如何在Sql Server中读取最近一段时间的记录,比如取最近3天的或最近3个月的记录. 主要用到DATEADD函数,下面是详细语句 取最近3天 select * from 表名where rq> ...

  6. SQL Server日期和时间的格式

    在SQL Server数据库中,SQL Server日期时间格式转换字符串可以改变SQL Server日期和时间的格式,是每个SQL数据库用户都应该掌握的.本文我们主要就介绍一下SQL Server日 ...

  7. ylb:SQL Server中的时间函数

    ylbtech-SQL Server:SQL Server-SQL Server中的时间函数 SQL Server中的时间函数. 1,SQL Server中的时间函数 返回顶部 1.   当前系统日期 ...

  8. js 将一大段时间均分为很多个小时间段

    最近写项目,遇到一个将选中时间段平均分割为若干小段,然后根据小段时间在数据库查询求均值的问题,后台大哥犯懒,非说后台做不了,让我分好传给他ヾ(. ̄□ ̄)ツ゜゜゜好气呦,但还要保持微笑,我就是这么懂礼貌 ...

  9. Sql Server中日期时间格式化为字符串输出

    在SQL Server数据库中,SQL Server日期时间格式转换字符串可以改变SQL Server日期和时间的格式,是每个SQL数据库用户都应该掌握的.本文我们主要就介绍一下SQL Server日 ...

随机推荐

  1. 空格 ACSII码 160 32

    ascii160和ascii32都表示空格,但是在IE里,160就不是显示空格,firefox里会显示空格,32不管是firefox里,还是IE里都显示空格.

  2. 安装多个ORACLE导致多个Oracle HOME的情况!

    Oracle由于版本的不同,在注册表中产生的注册表信息也有所不同,但主要的键值信息还是一样的,例如Oracle10g比oracle9i在注册表中表现的更为“简洁”,在未知的情况下,获取Oracle10 ...

  3. location(重定向,跳转到其他网页)

    <?php header('Location : https://www.baidu.com'); 这里是在响应头中添加一个 location 的头信息 客户端浏览器在接收到这个头信息过后会自动 ...

  4. (๑•̀ㅂ•́)و✧QQ用户信息管理系统

    这是第二篇文章,就直接切主题 这次剖析的也是自己的作业之一:QQ信息管理系统 一:(此处省略了建Proarams类,其实目的只是想强调把连接语句单独放一个类里更容易调用,命名规范如图) 二:(导入SQ ...

  5. Vagrant box 增加磁盘容量方法

    一直以来都是以vagrant+docker作为开发环境,可是久而久之,原Box自带的8G容量就捉襟见肘了.时不时需要手动删除一些东西. Virtualbox 本身只支持vdi硬盘文件格式的扩容,对vm ...

  6. MySql学习笔记【三、表相关操作】

    创建表 CREATE TABLE [IF NOT EXISTS] table_name( column_name data_type, ... ) 如: CREATE TABLE test_table ...

  7. 关于php 7.4编译安装

    一个不错的文章 https://hqidi.com/150.html 贴个地址就好啦, 借鉴了一把,很良心

  8. 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 ...

  9. kubernetes管理机密信息

    一.启动应用安全信息的保护: Secret介绍: 应用启动过程中可能需要一些敏感信息,比如访问数据库的用户名密码或者秘钥.将这些信息直接保存在容器镜像中显然不妥,Kubernetes 提供的解决方案是 ...

  10. Linux终端命令行的快捷键

    涉及在Linux命令行下进行快速移动光标.命令编辑.编辑后执行历史命令.Bang(!)命令.控制命令等.让basher更有效率. • 常用 1.ctrl+左右键:在单词之间跳转 2.ctrl+a:跳到 ...