sql分别用日期、月、年 分组 group by 分组,datepart函数,datediff函数 统计

sql分别用日期、月、年 分组 group by 分组,datepart函数,datediff函数 统计–以2013-12-1012:56:55为例–convert(nvarchar(10),CreateDate,120)=>2013-12-10–printconvert(varchar(100),getdate(),112)=>20200809–printconvert(nvarchar(20),getdate(),20)…

大家好,又见面了,我是你们的朋友全栈君。

–以2013-12-10 12:56:55为例
–print convert(nvarchar(10),getdate(),120)      =>      2013-12-10

–print convert(nvarchar(20),getdate(),23)        =>      2013-12-10

–print convert(nvarchar(20),getdate(),20)        =>      2018-07-18 09:09:09

–print convert(varchar(100), getdate(), 112)    =>       20200809

–print convert(nvarchar(16),getdate(),120)      =>       2019-04-26 11:56

–DATEPART(month,CreateDate)      =>      12
–DATEPART(year,CreateDate)      =>      2013
 

--2020-09-29 08:58:18
select convert(varchar(100), getdate(), 20)

--20200929085818
select replace(replace(replace(convert(varchar(100), getdate(), 20), '-', ''), ' ', ''), ':', '')

--202009290858
select left(replace(replace(replace(convert(varchar(100), getdate(), 20), '-', ''), ' ', ''), ':', ''), 12)

--2020-09-29 09:06:25.557
select convert(varchar(100), getdate(), 121)

--20200929090625557
select replace(replace(replace(replace(convert(varchar(100), getdate(), 121), '-', ''), ' ', ''), ':', ''),'.','')

----------------------------------
--09:12:55
select convert(varchar(100), getdate(), 8)

--09-29-20
select convert(varchar(100), getdate(), 10)

--20/09/29
select convert(varchar(100), getdate(), 11)

--200929
select convert(varchar(100), getdate(), 12)

--09:13:13
select convert(varchar(100), getdate(), 24)

--09:13:13:093
select convert(varchar(100), getdate(), 114)

--2020-09-29 09:13:13.093
select convert(varchar(100), getdate(), 121)

–当前日期+3天
PRINT CONVERT(VARCHAR(10),DATEADD(day,3,GETDATE()),120)  

–还可以这样
–年
select datepart(YEAR,’2013-06-08′)
select datepart(yyyy,’2013-06-08′)
select datepart(yy,’2013-06-08′)
–月
select datepart(MONTH,’2013-06-08′)
select datepart(mm,’2013-06-08′)
select datepart(m,’2013-06-08′)
–日
select datepart(dd,’2013-06-08′)
–1年中的第多少天
select datepart(dy,’2013-06-08′)
–季度
select datepart(qq,’2013-06-08′)
–1年中的第多少周
select datepart(wk,’2013-06-08′)
–星期
select datepart(dw,’2013-06-08′)  会输出  7
select datepart(weekday, ‘2013-06-08’)  会输出  7
select datename(weekday, ‘2013-06-08’)  会输出  星期六

时间差

print datediff(year, '2020-05-01', getdate())
print datediff(month, '2020-05-01', getdate())
print datediff(day, '2020-05-01', getdate())
print datediff(hour, '2022-03-31', getdate())
print datediff(minute, convert(datetime,'2020-05-01 10:00:00'), getdate())
print datediff(second, convert(datetime,'2020-05-01 10:00:00'), getdate())

本周星期一 至 星期日

SELECT DATEADD(wk, DATEDIFF(wk,0,getdate()), 0) --本周星期一
SELECT DATEADD(wk, DATEDIFF(wk,0,getdate()), 1) --本周星期二
SELECT DATEADD(wk, DATEDIFF(wk,0,getdate()), 2) --本周星期三
SELECT DATEADD(wk, DATEDIFF(wk,0,getdate()), 3) --本周星期四
SELECT DATEADD(wk, DATEDIFF(wk,0,getdate()), 4) --本周星期五
SELECT DATEADD(wk, DATEDIFF(wk,0,getdate()), 5) --本周星期六
SELECT DATEADD(wk, DATEDIFF(wk,0,getdate()), 6) --本周星期日

上n周的星期一 至 星期日

--上1周星期一【1*7-1=6】   上1周星期日【1*7-7=0】
select convert(char(10),dateadd(dd, - DATEPART (weekday , getdate()+@@DATEFIRST -1)-6,getdate()),120)
select convert(char(10),dateadd(dd, - DATEPART (weekday , getdate()+@@DATEFIRST -1)-0,getdate()),120)
--上2周星期一【2*7-1=13】  上2周星期日【2*7-7=7】
select convert(char(10),dateadd(dd, - DATEPART (weekday , getdate()+@@DATEFIRST -1)-13,getdate()),120)
select convert(char(10),dateadd(dd, - DATEPART (weekday , getdate()+@@DATEFIRST -1)-7,getdate()),120)
--上3周星期一【3*7-1=20】  上3周星期日【3*7-7=14】
select convert(char(10),dateadd(dd, - DATEPART (weekday , getdate()+@@DATEFIRST -1)-20,getdate()),120)
select convert(char(10),dateadd(dd, - DATEPART (weekday , getdate()+@@DATEFIRST -1)-14,getdate()),120)

下n周星期一 至 周星期日

--下1周星期一【1*7+2=9】  下1周星期日【2*7+1=15】
SELECT DATEADD(D,(select 9-(select DATEPART(weekday,getdate()))), GETDATE()); 
SELECT DATEADD(D,(select 15-(select DATEPART(weekday,getdate()))), GETDATE()); 
--下2周星期一【2*7+2=16】  下2周星期日【3*7+1=22】
SELECT DATEADD(D,(select 16-(select DATEPART(weekday,getdate()))), GETDATE());
SELECT DATEADD(D,(select 22-(select DATEPART(weekday,getdate()))), GETDATE()); 
--下3周星期一【3*7+2=23】  下3周星期日【4*7+1=29】
SELECT DATEADD(D,(select 23-(select DATEPART(weekday,getdate()))), GETDATE());
SELECT DATEADD(D,(select 29-(select DATEPART(weekday,getdate()))), GETDATE()); 
--下4周星期一【4*7+2=30】  下4周星期日【5*7+1=36】
SELECT DATEADD(D,(select 30-(select DATEPART(weekday,getdate()))), GETDATE());
SELECT DATEADD(D,(select 36-(select DATEPART(weekday,getdate()))), GETDATE()); 

获取某个时间段内所有“月份”

declare @begin datetime,@end datetime
set @begin='2015-2-6'
set @end='2015-12-2'
 
declare @months int
set @months=DATEDIFF(month,@begin,@end)
select convert(varchar(7),DATEADD(month,number,@begin) ,120) AS 月份
from master.dbo.spt_values
where type='p' AND number<=@months

获取某个时间段内所有“日期”
SQL Pivot 行转列  

DECLARE @days INT, 
@date_start DATETIME = '2017-03-15', 
@date_end DATETIME = '2017-04-13'  
SET @days = DATEDIFF(DAY, @DATE_START, @DATE_END);   
 
SELECT convert(char(10), DATEADD(dd, number, @DATE_START),112) AS yyyymmdd 
FROM    master.dbo.spt_values  as spt
WHERE   type = 'p' 
AND number <= @days


--直接查询
SELECT convert(varchar(10), DATEADD(dd, number, '2017-03-15'),112) AS duty_date 
FROM master.dbo.spt_values  as spt
WHERE type = 'p' AND number <= 29

直接输出日期,效果图如下

DECLARE @sql2 NVARCHAR(4000)
DECLARE @days INT, 
@date_start DATETIME = '2020-02-01', 
@date_end DATETIME = '2020-02-10'  
SET @days = DATEDIFF(DAY, @DATE_START, @DATE_END); 

SELECT @sql2 = ISNULL(@sql2 + ',', '') + '['+convert(varchar(100), duty_date, 112)+']' FROM (
SELECT convert(varchar(10), DATEADD(dd, number, @DATE_START),112) AS duty_date 
FROM master.dbo.spt_values  as spt
WHERE type = 'p' AND number <= @days
) tt
GROUP BY duty_date
PRINT @sql2
go

sql分别用日期、月、年 分组 group by 分组,datepart函数,datediff函数 统计

查询小时数据,按小时分组

-- 按小时产生连续的
SELECT 
  substring(convert(char(32),DATEADD(HH,number,CONCAT('2019-01-18',' ', '00:00')),120),1,16) AS GroupDay,type  
FROM
  master..spt_values  
WHERE type = 'p' AND DATEDIFF(HH,DATEADD(HH,number,CONCAT('2019-01-18',' ', '00:00')),CONCAT('2019-01-18',' ', '23:00'))>=0

-- 按小时统计交易笔数
declare @paySdate nvarchar(10) = '2021-05-22'
declare @payEdate nvarchar(10) = '2021-05-23'
declare @paySTime nvarchar(10) = '00:00'
declare @payETime nvarchar(10) = '23:59'
select a.GroupDay, ISNULL(b.e,0) 'feeCount' from (
				SELECT 
					substring(convert(char(32),DATEADD(HH,number,CONCAT(@paySdate,' ', @paySTime)),120),1,16) AS GroupDay,type  
				FROM 
					master..spt_values  
				WHERE 
					type = 'p' AND DATEDIFF(HH,DATEADD(HH,number,CONCAT(@paySdate,' ', @paySTime)),CONCAT(@payEdate,' ', @payETime))>=0  
				) a 
              left join (
               select 
                  convert(char(32),created_time,23) as d, datepart(hh,created_time) as h,
                  substring(convert(char(32),DATEADD(HH,datepart(hh,created_time),convert(char(32),created_time,23)),120),1,16) as st,
                  count(*) as e 
                from 
                  trans_order 
              where 1=1 
			  and created_time >= @paySdate and created_time<=@payEdate 
              and convert(char(8),created_time,108)>=@paySTime and convert(char(8),created_time,108)<=@payETime 
              group by convert(char(32),created_time,23),datepart(hh,created_time)) b 
              on b.st=a.GroupDay order by GroupDay

查询小时数据,按小时分组

select isnull(convert(varchar(2), sv.number) + '-' + convert(varchar(2), sv.number + 1), '合计') AS [时间段]
  --,sum(xiaoshoushu)  AS  [销量]
  --,sum(shixiao) AS  [实销]
  --,sum(chengben) as [成本]
  --,(sum(shoujia)-sum(chengben)) as [毛利]
  --,(SELECT sum(shixiao)  FROM  xiaoshoux c   WHERE  DATEPART(hh, c.xiaoshoutime) <= ISNULL(sv.number, 23) )  AS [累计实销]
from master..spt_values sv
  --join  xiaoshoux  x on (sv.number =  DATEPART(hh, x.xiaoshoutime))
where sv.type='p' and sv.number >= 0 and sv.number < 24
  --and x.xiaoshoutime between '2013-07-01' and '2013-07-16'
group by sv.number 
with  rollup 

查询当天的数据

-- 今天的所有数据
select * from trans_queue where DateDiff(dd,registration_time,getdate())=0
-- 昨天的所有数据
select * from trans_queue where DateDiff(dd,registration_time,getdate())=1
-- 7天内的所有数据
select * from trans_queue where DateDiff(dd,registration_time,getdate())<=7
-- 30天内的所有数据
select * from trans_queue where DateDiff(dd,registration_time,getdate())<=30
-- 本月的所有数据
select * from trans_queue where DateDiff(mm,registration_time,getdate())=0
-- 本年的所有数据
select * from trans_queue where DateDiff(yy,registration_time,getdate())=0

-- 今天的所有数据
select * from trans_queue where 1=1 
and registration_time > convert(varchar(10),dateadd(day,-1,getdate()),23) + ' 23:59:59'
and registration_time < convert(varchar(10),dateadd(day,1,getdate()),23)

查询当天的数据(EF Core)

var list = dbcontext.users.Where(x => ((DbFunctions)null).DateDiffDay(x.created_time, DateTime.Now) == 0).ToList();

/*
 * 设置语言为英语
 */
set language N’English’ –设置语言为英语
select datename(weekday, ‘2013-06-08’)  会输出  Saturday

/*
 * 设置语言为简体中文
 */
set language N’Simplified Chinese’ –设置语言为简体中文
select datename(weekday, ‘2013-06-08’)  会输出  星期六

/*
 * 设置一周的第一天为星期一
 */
set datefirst 1 –设置一周的第一天为星期一(美国一周的第一天习惯为星期天)
select datepart(weekday, ‘2013-06-08’)  会输出  6

/*
 * 设置一周的第一天为星期日
 */
set datefirst 7 –设置一周的第一天为星期日(美国一周的第一天习惯为星期天)
select datepart(weekday, ‘2013-06-08’)  会输出  7

/*
 * 查询当前会话的 datefirst 设置值
 */
select @@datefirst

SELECT CONVERT(VARCHAR(10),GETDATE(),120)  –2015-07-13
SELECT CONVERT(VARCHAR(10),GETDATE(),101)  –07/13/2015

–按日分组:2013-01-01
select convert(nvarchar(10),CreateDate,120) as Times,ISNULL(sum(Unit),0.0) as Drinking from pdt_Out
group by convert(nvarchar(10),CreateDate,120)
go

–按月分组:2012-01
select DATEPART(month,CreateDate) as Times,sum(Unit) as Totals from pdt_Out
group by DATEPART(month,CreateDate)
go

–按年分组:2013
select DATEPART(year,CreateDate) as Times,sum(Unit) as Totals from pdt_Out
group by DATEPART(year,CreateDate)

go

–当前日期减一
SELECT DATEADD(dd,-1,GETDATE())

–当前日期减一(格式为:2018-01-01)
SELECT CONVERT(NVARCHAR(10),DATEADD(dd,-1,GETDATE()),120) 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/141494.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • flask 数据库迁移_数据库迁移方案

    flask 数据库迁移_数据库迁移方案    在开发的过程中,需要修改数据库的模型,而且需要在修改之后更新数据库,最直接就是删除旧表,但是会丢失数据。所有最好的方式就是数据库迁移。它可以追踪数据库模型的变化,然后把变动应用到数据库中。    在flask中可以使用Flask-Migrate扩展,来实现数据迁移。并且集成到flask-Script中,所有的操作通过命令就能完成。Flask-Migrate提供了一个MigrateComma…

    2022年10月8日
    1
  • 多项式分布的理解概率公式的理解「建议收藏」

    多项式分布的理解概率公式的理解「建议收藏」多项式分布是二项分布的推广。二项分布(也叫伯努利分布)的典型例子是扔硬币,硬币正面朝上概率为p,重复扔n次硬币,k次为正面的概率即为一个二项分布概率。而多项分布就像扔骰子,有6个面对应6个不同的点数。二项分布时事件X只有2种取值,而多项分布的X有多种取值,多项分布的概率公式为  这个公式看上去像是莫名其妙地冒出来的,想要了解它首先必须要知道组合数学中的多项式定理。多项式定理:当n是一个正整数时…

    2022年10月12日
    0
  • iphone屏幕尺寸大全对照表(iphone所有屏幕尺寸)

    展开全部第一代iPhone2G屏幕为32313133353236313431303231363533e78988e69d83313333663037663.5英吋,分辨率为320*480像素,比例为3:2。第二代iPhone3G屏幕为3.5英吋,分辨率为320*480像素,比例为3:2。第三代iPhone3GS屏幕为3.5英吋,分辨率为320*480像素,比例为3:2。第四代iPhone4屏幕为3…

    2022年4月16日
    3.9K
  • 从零开始ARM裸机开发之建立开发环境

    从零开始ARM裸机开发之建立开发环境从零开始ARM裸机开发之建立开发环境                                   –参考朱有鹏ARM裸机课程1、前言:以前学过TQ2440的程序,在Ubuntu中建立的环境是不符合S5PV210需要的开发环境的这篇博文主要讲解一下建立一个简单的嵌入式开发环境需要什么?2、回

    2022年5月6日
    70
  • jquery 获取或设置radio单选框选中值的方法

    jquery 获取或设置radio单选框选中值的方法jquery获取或设置radio单选框选中值的代码1、获取选中值,三种方法都可以:2、设置第一个Radio为选中值:3、设置最后一个Radio为选中值:4、根据索引值设置任意一个radio为选中值:5、根据Value值设置Radio为选中值6、删除Value值为rd2的Radio7、删除第几个Radio8、遍历Radio1、获取选中值,三种方法都可以:$(‘input:radio:check…

    2022年5月11日
    48
  • plsqldev8.0下载和注册码「建议收藏」

    plsqldev8.0下载和注册码「建议收藏」[b]关键词:PL/SQL,下载,plsqldev,注册码,plsqldev711,汉化文件[/b]PL/SQLDeveloper是一种集成的开发环境,专门用于开发、测试、调试和优化OraclePL/SQL存储程序单元,比如触发器等。PL/SQLDeveloper功能十分全面,大大缩短了程序员的开发周期。[url]http://www.kutoku.info/software…

    2022年4月25日
    37

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号