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日 ...
随机推荐
- python numpy 的用法——diag函数
当 np.diag(array) 中 array是一个1维数组时,结果形成一个以一维数组为对角线元素的矩阵 array是一个二维矩阵时,结果输出矩阵的对角线元素
- 文档.Write()和文档.Writeln()石材
文档.Write()和文档.Writeln()文档是Javascript对象,其中封装了许多有用的方法,其中Write()和Writeln()是直接从浏览器窗口输出文本信息的方法.文件.Write() ...
- 阿里云 elasticsearch 增删改查
kibana 控制台 # 查询所有数据 GET /yixiurds_dev/_search { "query": { "match_all": { } } } ...
- 使用HandyJSON导致的内存泄漏问题相关解决方法
在移动开发中,与服务器打交道是不可避免的,从服务器拿到的接口数据最终都会被我们解析成模型,现在比较常见的数据传输格式是json格式,对json格式的解析可以使用原生的解析方式,也可以使用第三方的,我们 ...
- php打包下载以及断点续传
php下载单文件 以及 多文件打包下载,支持断点续传 断点续传的功能未经验证 需要nginx或者apache服务器指定静态文件,png, mp4, zip等后缀文件的目录, 直接实例化并调用 down ...
- iptables实现内外网端口映射及转发上网
前两天在工作中遇到一个需求,某192.168.1.0/24内网网段内只有一台主机A连接到了公网,A的两块网卡分别有一个公网地址(123.234.345.456)和一个内网地址(192.168.1.10 ...
- c++编程的字符集及其转换
一.两种字符集 多字节字符集(MBCS):因为计算机最早是在英语国家诞生的,大多数英文信息是由英文字母.数字以及一些其它字符构成了一个128个字符的ASCII字符集.本来这对于英语国家来说够用了.但是 ...
- 8.5.zookeeper应用案例_分布式应用HA
1.实现分布式应用(主节点HA)及客户端动态更新主节点状态 需求:某分布式系统中,主节点可以有多台,服务器可以动态(变化)上下线,任意一台客户端都能实时感知到主节点服务器的上下线 思路:架设Zooke ...
- tp5将查询数据返回为对象转为数组
use think\Model; collection()->toArray(); $result = collection(model("Menu")->order( ...
- mac+django(1.8.2)+uwsgi+nginx 部署
一. uwsgi 安装 检验 配置uwsgi.ini 1. 安装 pip3 install uwsgi 2. 检验 方法一(uwsgi启动文件): test.py内容如下: def applicati ...