导航
  • 主页
  • 基础类
  • 应用实例
  • 新技术前沿

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

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

请指点!谢拉~!
...全文
164 点赞 收藏 15
写回复
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!
=========================================================
回复
看二楼的啦
回复
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
没有会吗?
回复
发动态
发帖子
MS-SQL Server
创建于2007-09-28

3.2w+

社区成员

MS-SQL Server相关内容讨论专区
申请成为版主
社区公告
暂无公告