Sql Server 查询指定范围(一周,一月,本周,本月等)内的数据,及产生一段时间内所有日期

本文介绍如何使用SQL Server查询过去一周、一个月等特定时间范围内的数据,并展示如何生成某一时间段内的所有日期记录。
1.查询今日的所有数据

select * from 表名 where datediff(day,字段名,getdate())=0

2.查询昨日的所有数据

select * from 表名 where datediff(day,字段名,getdate()-1)=0

3.查询当天日期在一周年的数据

selcet * from 表名 where datediff(week,字段名,getdate()-1)=0

4.查询前30天的数据

select * from 表名 where datediff(d,字段名,getdate())<=30

5.查询上一个月的数据

select * from 表名 where datediff(m,字段名,getdate())<=1

6.查询当天的数据

select * from 表名 where datediff(dd,字段名,getdate())=0

7.查询24小时内的数据

select * from 表名 where datediff(hh,字段名,getdate())

8.查询本周的数据

select * from 表名 where datediff(week,字段名,getdate())=0

9.查询本月的数据

select * from 表名 where datediff(month,字段名,getdate())=0

10.查询本季的数据

select * from 表名 where datediff(qq,字段名,getdate())=0
CREATE VIEW view_BaseAllYear
AS
--生成一段时间内的日期(一年内)
SELECT CONVERT(NVARCHAR(10), DATEADD(DAY,number,DATEADD(YEAR,-1,GETDATE())),120) AS GroupDate  
FROM master..spt_values  
WHERE type = 'p' AND number <= DATEDIFF(DAY,DATEADD(YEAR,-1,GETDATE()),GETDATE())

CREATE VIEW view_BaseThisMonth
AS
--生成一段时间内的日期(一月内)
SELECT CONVERT(NVARCHAR(10), DateAdd(day,number,DATEADD(MONTH,-1,GETDATE())),120) AS GroupDate  
FROM master..spt_values  
WHERE type = 'p' AND number <= DATEDIFF(DAY,DATEADD(MONTH,-1,GETDATE()),GETDATE())
ALTER PROCEDURE pr_GetBetweenDays
@StartDate NVARCHAR(50) ,--开始时间  
@EndDate NVARCHAR(50) --结束时间  
AS 
BEGIN
	--产生一段时间内的所有日期
	Declare @sql nvarchar(4000);   
	SET @sql = 
	 '
			SELECT CONVERT(NVARCHAR(10), DateAdd(day,number,'''+@StartDate+'''),120) AS GroupDay  
			FROM master..spt_values  
			WHERE type = ''p'' AND number <= DateDiff(day,'''+@StartDate+''','''+@EndDate+''') 
	'
	PRINT @sql  
    EXEC(@sql)  
END


--EXECUTE pr_GetBetweenDays @StartDate = '2014-09-29', @EndDate = '2015-09-29'
--按周统计
SELECT TOP 10
DATENAME(year,AddDate) 年,
DATENAME(week,AddDate) 周,
COUNT(1) 单量,
SUM(total) 总金额,
AVG(total) 客单价
FROM orderinfo t(NOLOCK)
WHERE AddDate BETWEEN '2013-1-1' AND '2014-1-1'
GROUP BY DATENAME(year,AddDate),DATENAME(week,AddDate)
ORDER BY CONVERT(INT,DATENAME(week,AddDate));

----------------------------------------------------------------
--按月统计
SELECT TOP 10
DATENAME(year,AddDate) 年,
DATENAME(month,AddDate) 月,
COUNT(1) 单量,
SUM(total) 总金额,
AVG(total) 客单价
FROM orderinfo t(NOLOCK)
WHERE AddDate BETWEEN '2013-1-1' AND '2014-1-1'
GROUP BY DATENAME(year,AddDate),DATENAME(month,AddDate)
ORDER BY CONVERT(INT,DATENAME(month,AddDate));

----------------------------------------------------------------
--按季度统计
SELECT TOP 10
DATENAME(year,AddDate) 年,
DATENAME(quarter,AddDate) 季度,
COUNT(1) 单量,
SUM(total) 总金额,
AVG(total) 客单价
FROM orderinfo t(NOLOCK)
WHERE AddDate BETWEEN '2013-1-1' AND '2014-1-1'
GROUP BY DATENAME(year,AddDate),DATENAME(quarter,AddDate)
ORDER BY CONVERT(INT,DATENAME(quarter,AddDate));

----------------------------------------------------------------
--按年统计
SELECT TOP 10
DATENAME(year,AddDate) 年,
COUNT(1) 单量,
SUM(total) 总金额,
AVG(total) 客单价
FROM orderinfo t(NOLOCK)
WHERE AddDate BETWEEN '2012-1-1' AND '2014-1-1'
GROUP BY DATENAME(year,AddDate)
ORDER BY CONVERT(INT,DATENAME(year,AddDate));

 

评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

smartsmile2012

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值