SQL日期计算
发布网友
发布时间:2022-04-08 08:39
我来回答
共5个回答
热心网友
时间:2022-04-08 10:08
SELECT
convert(varchar(10),DATEADD(wk, DATEDIFF(wk,0,dateadd(wk,24,'2009-01-01')), 0),120) 起始日期,
convert(varchar(10),DATEADD(wk, DATEDIFF(wk,0,dateadd(wk,24,'2009-01-01')), 6),120) 结束日期
上面求第25个周起止时间,求第20周把24改成19即可。
***************************************
补充解释一下:
1:dateadd(week,24,'2009-01-01')是在'2009-01-01'的基础上加上24周,算上'2009-01-01'所在的周正好是25周,但是这个加法是以7天为基数加的,换句话说'2009-01-01'是周几,加完之后也是周几。
2:DATEDIFF(wk,0,dateadd(wk,24,'2009-01-01'))
【0代表1900年1月1日00:00】,这个是求第1步算出的日期和【1900年1月1日00:00】年的星期差。
3:DATEADD(wk, DATEDIFF(wk,0,dateadd(wk,24,'2009-01-01')), 0)
是求出第一步求出的日期所在周的周一的日期。
4:DATEADD(wk, DATEDIFF(wk,0,dateadd(wk,24,'2009-01-01')), 6)
是求出第一步求出的日期所在周的周日的日期。
5:convert(varchar(10),xxxx,120)是求出第3或者4步中时间的 年份+月份
**************************************
---
以上,希望对你有所帮助。
热心网友
时间:2022-04-08 11:26
写了一个存储过程,不知楼主是否用的上:
功能描述:根据传入的年份,周数,将返回该周的开始和结束日期
说明:我这里是按照你的说法计算的周,如果要按系统正常返回的周,只要去掉最后一条语句中的两个dateadd()函数即可
create proc get_date
@y varchar(10),--年份
@wk int--周
as
set @y=@y+'0101'
declare @beg_date datetime,@end_date datetime
set @beg_date=convert(datetime,@y)
select @end_date=dateadd(ms,-3,dateadd(yy,datediff(yy,0,@y )+1,0))
if object_id('tempdb..#tb') is not null
drop table #tb
create table #tb(t_id int identity(1,1),the_date varchar(10),the_week int)
while @beg_date<=@end_date
begin
insert into #tb(the_date,the_week)
select convert(varchar(8),@beg_date,112),datename(week,@beg_date)
set @beg_date=dateadd(d,1,@beg_date)
end
select convert(varchar(10),min(dateadd(day,1,the_date)),120) 开始日期,
convert(varchar(10),dateadd(d,1,max(the_date)),120) 结束日期 from #tb where the_week=@wk
GO
--调用
exec get_date '2009',25
热心网友
时间:2022-04-08 13:01
case
when
date>sysdate
then
substr(date,1,4)-substr(sysdate,1,4)||'年'||substr(date,4,2)-substr(sysdate,4,2)||'月'
when
date
like
'200803'
then
'0年0月'
改成这样就ok了
case
when
date>sysdate
then
substr(date,1,4)-substr(sysdate,1,4)||'年'||abs(substr(date,4,2)-substr(sysdate,4,2))||'月'
when
date
like
'200803'
then
'0年0月'
那就再改
case
when
date>sysdate
and
substr(date,1,4)>=substr(sysdate,1,4)
and
substr(date,4,2)>substr(sysdate,4,2)
then
substr(date,1,4)-substr(sysdate,1,4)||'年'||abs(substr(date,4,2)-substr(sysdate,4,2))||'月'
when
substr(date,1,4)>substr(sysdate,1,4)
and
substr(date,4,2)
评论
0
0
0
加载更多
热心网友
时间:2022-04-08 14:52
1,
select dateadd(dd,2-datepart(dw,dateadd(wk,周数-1,年份)),dateadd(wk,周数-1,周数)),dateadd(dd,8-datepart(dw,dateadd(wk,周数-1,周数)),dateadd(wk,周数-1,周数))
注意:年份的格式为‘****-01-01’,如你这里的2009年则是‘2009-01-01’
2,
declare @i int
declare @datetime datetime
declare @table table(ID int,date datetime)
set @i=1
set @datetime=年份+月份+01(格式如‘2009-06-01’)
while @datetime < 年份+(月份+1)+01(格式如‘2009-07-01’)
begin
if datepart(weekday,@datetime)=2
begin
insert into @table values(@i,@datetime)
set @i=@i+1
end
set @datetime=dateadd(day,1,@datetime)
end
select * from @table where ID=周数
我这样写应该很容易看,有什么问题再问我,要求加分……
热心网友
时间:2022-04-08 17:00
select 本年第多少周=datename(week,'2009-6-20')
,今天是周几=datename(weekday,'2009-6-20')