时间存储过程
/*
主要查询信息表tc_data表,
createtabletc_data(IDnumeric(22)--ID号
,char_namenvarcher(64)--订单名称
,numnumeric(22,3)--数量
,moneynumeric(18,22)--金额
,create_timedatetime--时间
)
写一个存储过程参数是条件(@conditionnvarchar(64)),开始时间(@begintimenvarchar(64)),结束时间(@endtimenvarchar(64));
说明:
条件(@conditionnvarchar(64))的内容为:Year、Quarter、Month、Week
开始时间(@begintimenvarchar(64))和结束时间(@endtimenvarchar(64))的内容为YYYY-MM-DD;
查询时,当条件为Year年时,显示年的最后一天的记录,按开始时间和结束时间来确定查询哪年,如果跨两个或两个以上年则显示各年最后一天的记录;
当条件为Quarter季度时,显示季度的最后一天的记录,按开始时间和结束时间来确定查询哪个季度,如果跨两个或两个以上的季度则显示各季度最后一天的记录;
当条件为Month月时,显示月最后一天的记录,按开始时间和结束时间来确定查询哪个月,如果跨两个或两个以上的月则显示各月最后一天的记录;
当条件为Week周时,显示周内每天的记录,按开始时间和结束时间来确定查询哪个周,如果跨两个或两个以上的周则最多显示四周每天的记录。
*/
--以下为SQL2005或更高版本,在SQL2000上会出错的
createprocdbo.Usp_Getdata
(
@conditionasnvarchar(64),--条件
@begintimeasnvarchar(64),--开始时间
@endtimeasnvarchar(64)--结束时间
)
as
begin
setnocounton;
ifdatediff(dd,@begintime,@endtime)<0
begin
raiserror50001'@begintime必须小于@endtime'
return
end
createtable#(begintimedatetimenotnull,endtimedatetimenotnull)
declare@Tcountasint
if@condition='Year'
begin
insertinto#
select
cast(tempYearasvarchar(4))+'-12-31',cast(tempYearasvarchar(4))+'-12-3123:59:59.997'
from(selecttop(datediff(yy,@begintime,@endtime)+1)((row_number()over(orderbyID))-1)+Year(@begintime)tempYearfromsyscolumns)a
end
declare@tempbeginasint
if@condition='Quarter'
begin
set@tempbegin=casewhenMonth(@begintime)>=1andMonth(@begintime)<4then3whenMonth(@begintime)>=4andMonth(@begintime)<7then6whenMonth(@begintime)>=7andMonth(@begintime)<10then9else12end
insertinto#
select
dateadd(m,tempNum*3,dateadd(dd,-1,dateadd(mm,1,cast((cast(Year(@begintime)asvarchar(4))+'-'+cast(@tempbeginasvarchar(2))+'-1')asdatetime)))),dateadd(m,tempNum*3,dateadd(dd,-1,dateadd(mm,1,cast((cast(Year(@begintime)asvarchar(4))+'-'+cast(@tempbeginasvarchar(2))+'-123:59:59.997')asdatetime))))
from(selecttop(datediff(qq,@begintime,@endtime)+1)((row_number()over(orderbyID))-1)tempNumfromsyscolumns)a
end
if@condition='Month'
begin
set@tempbegin=Month(@begintime)
insertinto#
select
dateadd(m,tempNum,dateadd(dd,-1,dateadd(mm,1,cast((cast(Year(@begintime)asvarchar(4))+'-'+cast(@tempbeginasvarchar(2))+'-1')asdatetime)))),dateadd(m,tempNum,dateadd(dd,-1,dateadd(mm,1,cast((cast(Year(@begintime)asvarchar(4))+'-'+cast(@tempbeginasvarchar(2))+'-123:59:59.997')asdatetime))))
from(selecttop(datediff(mm,@begintime,@endtime)+1)((row_number()over(orderbyID))-1)tempNumfromsyscolumns)a
end
if@condition='Week'
begin
declare@tempbegintimeasdatetime
SETDATEFIRST1;
select@tempbegintime=dateadd(dd,(Datepart(wk,@begintime)-1)*7-Datepart(dw,cast(Year(@begintime)asvarchar(4))+'-1-1')+1,cast(Year(@begintime)asvarchar(4))+'-1-1')
--insertinto#
select
dateadd(dd,0,@tempbegintime),convert(varchar(10),dateadd(dd,(casewhen(datediff(wk,@begintime,@endtime)+1)>4then4*7else(Datepart(wk,@endtime)-Datepart(wk,@begintime)+1)*7end),@tempbegintime),120)+'23:59:59.997'
end
selecta.*fromtc_dataainnerjoin#bona.create_timebetweenb.begintimeandb.endtime
droptable#
end
go
/*
--测试
execdbo.Usp_Getdata'Year','2014-01-01','2014-01-01';
execdbo.Usp_Getdata'Quarter','2014-01-01','2015-01-01';
execdbo.Usp_Getdata'Month','2014-01-01','2015-01-01';
execdbo.Usp_Getdata'Week','2014-06-15','2015-01-01';
execdbo.Usp_Getdata'Week','2014-06-15','2014-06-28';
execdbo.Usp_Getdata'Week','2014-01-01','2015-01-01';
*/
㈡ 如何查询存储过程开始执行时间和结束时间
需要在存储过程中定义的时候把开始执行时间和结束时间打印出来。
举例如下:
创建存储过程:
createorreplaceprocerep_testasv_begintimevarchar2(20);v_endtimevarchar2(20);v_strvarchar2(10);beginv_begintime:=to_char(sysdate,'yyyy-mm-ddhh24:mi:ss');select'badkano'intov_strfromal;v_endtime:=to_char(sysdate,'yyyy-mm-ddhh24:mi:ss');dbms_output.put_line('开始时间为:'||v_begintime);dbms_output.put_line('结束时间为:'||v_endtime);end;end;执行存储过程:
beginp_test;end;
执行结果:
说明:由于样例存储过程过于简单,但在进行过多数据处理的时候,看到的结果会比较明显。
㈢ sqlserver 包含一个时间区间的存储过程如何写
create PROCEDURE ps_test
declare @id varchar(50)
as
begin
declare @from_date datetime
declare @to_date datetime
create table #tt_table (id,output_date)
select @from_date = 开始时间, @to_date = 结束时间
from A
where id = @id
while(@from_date <= @to_date)
begin
insert into #tt_table(id,output_date)
values( @id,@from_date)
DATEADD(day,1,@from_date)
end
select id, output_date
from #tt_table
end
go
㈣ 存储过程中时间如何比较
可以直接比较的,不过要把他们转化为字符串类型,如to_char(sysdate,'yyyymmddhh24miss'); 这是把当前时间转化为指定格式的字符串,比如现在是2009年7月30日0:36分42秒,那么转化后即为20090730003642,然后去比较即可,顺便告诉你,日期转化为字符串还能直接减,并且减出来的即为相差天数~~
㈤ 时间统计的一个存储过程写法
1.121.12121121212
㈥ 如何创建一个返回当前系统时间的存储过程
创建:
create procere p_1
as
declare
@date datetime
begin
set @date=getdate()
print @date
end
执行:
exec p_1
㈦ mysql 如何实现时间隔调用存储过程
crontab
-e0
*
*
*
*
mysql
-e
"call
sp_test()"
对我有用[0]丢个板砖[0]引用举报管理TOPACMAIN_CHM(acmain)等
级:26更多勋章
㈧ 时间比较的存储过程
当然可以时间是可以直接比较的
也可以使用 datapart求时间差
㈨ 存储过程 向date型字段存入当前系统时间
sysdate是系统时间,它本身就是时间类型了,如果time_last_login是时间类型,那就可以直接使用sysdate。如果你的意思是要转化成字符串,那函数应该是to_char
㈩ 关于时间的存储过程
BEGIN
--select CAST(@dt1 AS datetime)
select convert(datetime,@dt1)
--select CAST(@dt2 AS datetime)
select convert(datetime,@dt2)
end
我看了半天 还是觉得会是这里出问题 select convert(datetime,@dt1)到这里没有赋值,应该就是查询出来了 其实你直接在@dt的地方用convert(datetime,@dt1)是一样的,不用这样