求教关于日期的问题~~~有点急~~!

pzwsnet 2006-01-19 09:17:19
现在我知道一个具体的日期,根据这个日期求去年的同周日期
例如:今天是2006年1月19日第三周星期四
如何通过sql去获取2005年1月的第三周星期四是几号

请指点!谢拉~!
...全文
183 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
xq02 2006-01-19
  • 打赏
  • 举报
回复
再改一下
declare @dt datetime,@dt2 int
set @dt='2006-03-16'
set @dt2= cast(convert(datetime,cast(year(@dt)-1 as varchar(20))+'-'+cast(month(@dt) as varchar(20))+'-01',120) as int)
print @dt2
print cast(datepart(wk,@dt) as int)%4
set @dt2=@dt2+(7-datepart(weekday,convert(datetime,cast(year(@dt)-1 as varchar(20))+'-'+cast(month(@dt) as varchar(10))+'-1',120)))
+case when cast(datepart(wk,@dt) as int)%4=1 then 0 when cast(datepart(wk,@dt) as int)%4=2 then datepart(weekday,@dt)
when cast(datepart(wk,@dt) as int)%4=3 then
datepart(weekday,@dt)+7 when cast(datepart(wk,@dt) as int)%4=4 then datepart(weekday,@dt)+14 end
print @dt2
select cast(@dt2 as datetime)

-----
2005-03-17
zhaoanle 2006-01-19
  • 打赏
  • 举报
回复
--注:星期1为一个星期开始,星期天为结束,星期1为数字为1,星期天为7
--如查2006年2月第4周星期天是几号

declare @selyear varchar(4) --要查的年份
declare @selmonth varchar(2) --要查的月份
declare @selweek int --要查第几周
declare @selweekday int --要查星期几
declare @day int
declare @sel datetime
declare @week int

--输入条件
set @selyear='2006' --年份
set @selmonth='02' --月份
set @selweek=4 --第几周
set @selweekday=7 --星期几

--查询
set @day=0
set @sel=@selyear + '-'+@selmonth +'-'+'01'
print @sel

if datepart(weekday,@sel)=1
begin
set @day=@day+1
end
else
begin
set @day=9-datepart(weekday,@sel)
end
set @week=1
set @day=@day+(@selweek-@week-1)*7+@selweekday
select @selyear +'-'+ @selmonth +'-'+cast(@day as varchar(2))

/*结果
2006-02-26
samfeng_2003 2006-01-19
  • 打赏
  • 举报
回复
哦!SORRY,说错了,验证了一下,好象是过个闰年就加一天吧!

declare @t varchar(20)
set @t='2006-01-24'
--2005年
select dateadd(d,1,dateadd(year,-1,@t))
--2004年
select dateadd(d,3,dateadd(year,-2,@t))

这样推算的,比较有意思但是不适合计算机运算!推荐mislrb(上班看看早报,上上CSDN,下班看看电影)兄的方法,呵呵,简单可靠!
xq02 2006-01-19
  • 打赏
  • 举报
回复
刚才有点问题,这样才对

declare @dt datetime,@dt2 int
set @dt='2006-01-19'
set @dt2= cast(convert(datetime,cast(year(@dt)-1 as varchar(20))+'-'+cast(month(@dt) as varchar(10))+'-1',120) as int)
set @dt2= @dt2+7*(datepart(wk,@dt)-2)+datepart(weekday,@dt)+
(7-datepart(weekday,convert(datetime,cast(year(@dt)-1 as varchar(20))+'-'+cast(month(@dt) as varchar(10))+'-1',120)))
select cast(@dt2 as datetime)

-----------------------------
2005-01-13
samfeng_2003 2006-01-19
  • 打赏
  • 举报
回复
哎,我们都算复杂了!郁闷

declare @t varchar(20)
set @t='2006-01-24'

select dateadd(d,1,dateadd(year,-1,@t))

减一年,那么天数就加一,应该就可以了!
samfeng_2003 2006-01-19
  • 打赏
  • 举报
回复
declare @t varchar(20)
set @t='2006-02-22'




select dateadd(d,((datepart(weekday,@t)+@@datefirst-2)%7+1)-
(datepart(weekday,dateadd(week,
datediff(d,
dateadd(d,7-(datepart(weekday,convert(char(8),@t,120)+'01')+
@@datefirst-2)%7-1,convert(char(8),@t,120)+'01'),
@t)/7+
case when datediff(d,
dateadd(d,7-(datepart(weekday,convert(char(8),@t,120)+'01')+
@@datefirst-2)%7-1,convert(char(8),@t,120)+'01'),
@t)%7>0 then 1 else 0 end
,convert(char(8),dateadd(year,-1,@t),120)+'01'))+@@datefirst-2)%7-1,
dateadd(week,
datediff(d,
dateadd(d,7-(datepart(weekday,convert(char(8),@t,120)+'01')+
@@datefirst-2)%7-1,convert(char(8),@t,120)+'01'),
@t)/7+
case when datediff(d,
dateadd(d,7-(datepart(weekday,convert(char(8),@t,120)+'01')+
@@datefirst-2)%7-1,convert(char(8),@t,120)+'01'),
@t)%7>0 then 1 else 0 end
,convert(char(8),dateadd(year,-1,@t),120)+'01'))


------------------------------------------------------
2005-02-23 00:00:00.000

(所影响的行数为 1 行)
xq02 2006-01-19
  • 打赏
  • 举报
回复
declare @dt datetime,@dt2 int
set @dt='2006-01-19'
set @dt2= cast(convert(datetime,cast(year(@dt)-1 as varchar(20))+'-'+cast(month(@dt) as varchar(10))+'-1',120) as int)
set @dt2= @dt2+7*month(@dt)+datepart(weekday,@dt)
select cast(@dt2 as datetime)

2005-01-13
mislrb 2006-01-19
  • 打赏
  • 举报
回复
注解一下:(两个dateadd)
里面的dateadd求出上一年的第N周的最后一天;
外面的dateadd求出上一年的第N周的星期M的日期。
-狙击手- 2006-01-19
  • 打赏
  • 举报
回复
支持楼上
mislrb 2006-01-19
  • 打赏
  • 举报
回复
--2006年1月19日第三周星期四
declare @dt datetime,@firstdate datetime
set @dt='2006-01-19'
set @firstdate=convert(datetime,convert(varchar(4),year(@dt)-1)+'-01-01',120)
select dateadd(day,datepart(weekday,@dt)-7,dateadd(day,datepart(week,@dt)*7-datepart(weekday,@firstdate),@firstdate))
天地客人 2006-01-19
  • 打赏
  • 举报
回复
declare @dd datetime
declare @dd1 datetime

set @dd ='2006-1-12'-- getdate()

select @dd 日期,datepart(week,@dd) 周次,datepart(weekday,@dd) 天次

set @dd1 = cast( str(datepart(year,dateadd(year,-1,@dd))) +'-'+ str(datepart(month, @dd)) + '-1' as datetime)

select @dd1 上年当月第一天,datepart(weekday,@dd1) 天次 --, dateadd(week,datepart(week,@dd),@dd1) ,dateadd(day,datepart(weekday,@dd),dateadd(week,datepart(week,@dd),@dd1))

set @dd1 = dateadd(week,datepart(week,@dd)-1,@dd1)
select @dd1 上年同一周,datepart(weekday,@dd1) 天次

set @dd1 =dateadd(day,-datepart(weekday,@dd1)+1,@dd1)
select @dd1 上年同周第一天

set @dd1 = dateadd(day,datepart(weekday,@dd)-1,@dd1)
select @dd1 最后结果

应还有更好的方法!这先应急吧 :)

=========================================================
我的回复,尽可能为你分忧解难
BLOG:blog.csdn.net/softj --欢迎光临,有更多信息等着你!
QQ高级群:5063844专研数据库 --大家进来聊一聊!
MSN:softj@msn.com --这不常用!
Mail:zj.wj@163.com --有什么问题可以和我来EMAIL!
=========================================================
浩方软件HFWMS 2006-01-19
  • 打赏
  • 举报
回复
看二楼的啦
lw1a2 2006-01-19
  • 打赏
  • 举报
回复
看楼上的了:)
天地客人 2006-01-19
  • 打赏
  • 举报
回复
帮你想法中。。。

=========================================================
我的回复,尽可能为你分忧解难
BLOG:blog.csdn.net/softj --欢迎光临,有更多信息等着你!
QQ高级群:5063844专研数据库 --大家进来聊一聊!
MSN:softj@msn.com --这不常用!
Mail:zj.wj@163.com --有什么问题可以和我来EMAIL!
=========================================================
pzwsnet 2006-01-19
  • 打赏
  • 举报
回复
没有会吗?

34,593

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧