• 全部
  • 基础类
  • 应用实例
  • 新技术前沿

请大家帮忙,如何取得今日,昨日,本周,上周,本月,上月,本年,去年的数据.谢谢

qihoo2009 2008-02-26 03:20:06
数据表plan
字段有:plan,user_id, plan_begintime,plan_endtime
如何取得今日,昨日,本周,上周,本月,上月,本年,去年的数据
...全文
68 点赞 收藏 4
写回复
4 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
pt1314917 2008-02-26

select
getdate() -- 今日
,dateadd(dd,-1,getdate()) -- 昨日
,datepart(week,getdate()) -- 本周
,datepart(week,getdate())-1 -- 上周
,month(getdate()) -- 本月
,month(getdate())-1 -- 上月
,year(getdate()) -- 本年
,year(getdate())-1 -- 去年
回复
tim_spac 2008-02-26
select 
dateadd(day,datediff(day,0,getdate()),0) -- 今日
,dateadd(day,datediff(day,0,getdate())-1,0) -- 昨日
,dateadd(week,datediff(week,0,getdate()),0) -- 本周
,dateadd(week,datediff(week,0,getdate())-1,0) -- 上周
,dateadd(month,datediff(month,0,getdate()),0) -- 本月
,dateadd(month,datediff(month,0,getdate())-1,0) -- 上月
,dateadd(year,datediff(year,0,getdate()),0) -- 本年
,dateadd(year,datediff(year,0,getdate())-1,0) -- 去年
回复
liangCK 2008-02-26
--图书销售数据表
CREATE TABLE tb(
Books nvarchar(30), --书名
Date datetime, --销售日期
Sales int) --销售数量
--生成测试数据
INSERT tb SELECT
CHAR(65+RAND(CHECKSUM(NEWID()))*25),
DATEADD(Day,1-RAND(CHECKSUM(NEWID()))*500,GETDATE()),
RAND(CHECKSUM(NEWID()))*360
FROM sysobjects a,sysobjects b
--显示数据
SELECT * FROM tb
GO

--排行榜处理的存储过程
CREATE PROC p_Qry
@Type nchar(1)=N'日', --排行榜处理类型(日、周、月、季、年)
@Date datetime=null, --排行榜日期,不指定为当前日期
@TopN int=10 --记录数
AS
SET NOCOUNT ON
DECLARE @p_dt_begin datetime,@dt_begin datetime

--参数检测
IF CHARINDEX(@Type,N'日周月季年')=0
SET @Type=N'日'
IF @Date IS NULL
SET @Date=CONVERT(char(10),GETDATE(),120)
ELSE
SET @Date=CONVERT(char(10),@Date,120)
IF ISNULL(@TopN,0)<1
SET @TopN=10

--根据@Type决定计算的起始日期
IF @Type=N'日'
SELECT
@dt_begin=@Date,
@Date=DATEADD(Day,1,@Date),
@p_dt_begin=DATEADD(Day,-1,@dt_begin)
ELSE IF @Type=N'周'
SELECT
@dt_begin=DATEADD(Day,-(DATEPART(Weekday,@Date)+@@DATEFIRST-2)%7,@Date),
@Date=DATEADD(Day,7,@dt_begin),
@p_dt_begin=DATEADD(Day,-7,@dt_begin)
ELSE IF @Type=N'月'
SELECT
@dt_begin=CONVERT(char(8),@Date,120)+'01',
@Date=DATEADD(Month,1,@dt_begin),
@p_dt_begin=DATEADD(Month,-1,@dt_begin)
ELSE IF @Type=N'季'
SELECT
@dt_begin=CONVERT(char(8),
DATEADD(Month,DATEPART(Quarter,@Date)*3-Month(@Date)-2,@Date),
120)+'1',
@Date=DATEADD(Month,3,@dt_begin),
@p_dt_begin=DATEADD(Month,-3,@dt_begin)
ELSE
SELECT
@dt_begin=CONVERT(char(5),@Date,120)+'01-01',
@Date=DATEADD(Year,1,@dt_begin),
@p_dt_begin=DATEADD(Year,-1,@dt_begin)

--取排名数据到临时表
SET ROWCOUNT @TopN
--最新名称
SELECT Books,Sales_Amount=SUM(Sales)
INTO #1 FROM tb
WHERE Date>=@dt_begin AND Date<@Date
GROUP BY Books
ORDER BY Sales_Amount DESC
--上期名次
SELECT Books,Sales_Amount=SUM(Sales)
INTO #2 FROM tb
WHERE Date>=@p_dt_begin AND Date<@dt_begin
GROUP BY Books
ORDER BY Sales_Amount DESC

--显示结果
SELECT a.Books,a.Sales_Amount,a.Place,
Description=CASE
WHEN b.Books IS NULL THEN N'↑新上榜'
WHEN a.Place=b.Place THEN N'-'
WHEN a.Place>b.Place THEN N'↓'+RTRIM(a.Place-b.Place)+N'位'
ELSE N'↑'+RTRIM(b.Place-a.Place)+N'位' END,b.*
FROM(
SELECT Books,Sales_Amount,
Place=(SELECT COUNT(Sales_Amount) FROM #1 WHERE Sales_Amount>aa.Sales_Amount)+1
FROM #1 aa
)a LEFT JOIN(
SELECT Books,
Place=(SELECT COUNT(Sales_Amount) FROM #2 WHERE Sales_Amount>aa.Sales_Amount)+1
FROM #2 aa
)b ON a.Books=b.Books
ORDER BY a.Place
GO

--调用
EXEC p_Qry N'日'
EXEC p_Qry N'周'
EXEC p_Qry N'月'
EXEC p_Qry N'季'
EXEC p_Qry N'年'
回复
liangCK 2008-02-26
DECLARE @dt datetime
SET @dt=GETDATE()

DECLARE @number int
SET @number=3

--1.指定日期该年的第一天或最后一天
--A. 年的第一天
SELECT CONVERT(char(5),@dt,120)+'1-1'

--B. 年的最后一天
SELECT CONVERT(char(5),@dt,120)+'12-31'


--2.指定日期所在季度的第一天或最后一天
--A. 季度的第一天
SELECT CONVERT(datetime,
CONVERT(char(8),
DATEADD(Month,
DATEPART(Quarter,@dt)*3-Month(@dt)-2,
@dt),
120)+'1')

--B. 季度的最后一天(CASE判断法)
SELECT CONVERT(datetime,
CONVERT(char(8),
DATEADD(Month,
DATEPART(Quarter,@dt)*3-Month(@dt),
@dt),
120)
+CASE WHEN DATEPART(Quarter,@dt) in(1,4)
THEN '31'ELSE '30' END)

--C. 季度的最后一天(直接推算法)
SELECT DATEADD(Day,-1,
CONVERT(char(8),
DATEADD(Month,
1+DATEPART(Quarter,@dt)*3-Month(@dt),
@dt),
120)+'1')


--3.指定日期所在月份的第一天或最后一天
--A. 月的第一天
SELECT CONVERT(datetime,CONVERT(char(8),@dt,120)+'1')

--B. 月的最后一天
SELECT DATEADD(Day,-1,CONVERT(char(8),DATEADD(Month,1,@dt),120)+'1')

--C. 月的最后一天(容易使用的错误方法)
SELECT DATEADD(Month,1,DATEADD(Day,-DAY(@dt),@dt))


--4.指定日期所在周的任意一天
SELECT DATEADD(Day,@number-DATEPART(Weekday,@dt),@dt)


--5.指定日期所在周的任意星期几
--A. 星期天做为一周的第1天
SELECT DATEADD(Day,@number-(DATEPART(Weekday,@dt)+@@DATEFIRST-1)%7,@dt)

--B. 星期一做为一周的第1天
SELECT DATEADD(Day,@number-(DATEPART(Weekday,@dt)+@@DATEFIRST-2)%7-1,@dt)
回复
相关推荐
发帖
MS-SQL Server
创建于2007-09-28

3.3w+

社区成员

MS-SQL Server相关内容讨论专区
申请成为版主
帖子事件
创建了帖子
2008-02-26 03:20
社区公告
暂无公告