create function getstr
(
@year int,
@month int
)
returns datetime
as
begin
declare @dt datetime,@tmp datetime
set @tmp=convert(datetime,convert(varchar,@year)+'-'+convert(varchar,@month)+'-1')
if datepart(weekday,@tmp)<=5
set @dt=dateadd(day,5-datepart(weekday,@tmp)+7,@tmp)
else
set @dt=dateadd(day,14-datepart(weekday,@tmp)+5,@tmp) return @dt
end
goselect dbo.getstr(2005,3)
(
@year int,
@month int
)
returns datetime
as
begin
declare @dt datetime,@tmp datetime
set @tmp=convert(datetime,convert(varchar,@year)+'-'+convert(varchar,@month)+'-1')
if datepart(weekday,@tmp)<=5
set @dt=dateadd(day,5-datepart(weekday,@tmp)+7,@tmp)
else
set @dt=dateadd(day,14-datepart(weekday,@tmp)+5,@tmp) return @dt
end
goselect dbo.getstr(2005,3)
--1:在SQL中怎么获得已知日期是星期几?
select datename(weekday,getdate())
--进来一看是:
--2:我想在Sql中或得已知月份的第二个星期四.该怎么处理?
--没有看明白!^_^!
--最终结果存在@date中.
declare @month int, @date datetime
set @month=4
--得到今年的第一天
set @date=dateadd(yy, datediff(yy, '1901-01-01', getdate()), '1901-01-01')
--得到指定月的第一天
set @date=dateadd(mm, @month-datepart(mm, @date), @date)
--得到当月第二个星期的星期四
set @date=dateadd(ww, 1, @date)
set datefirst 7 --确保系统的每周第一天是星期天
set @date=dateadd(dd, 5-datepart(dw, @date), @date)
--显示结果
select @date
--思路是得到某个月的第一天是星期几,然后通过判断运算得到某个月的第二个星期四。--首先声明两个变量,
--@mm 这个变量用来存储你想得到第二个星期四的某年某月的第一天。
--@dd 这个变量得到某月的第一天是星期几declare @mm datetime,@dd varchar(8)
set @mm='2005-03-01'
set @dd=(select datename(dw,@mm))
--select @dd
if(@dd='星期一')
select '本月的第二个星期四是:',dateadd(dd,10,@mm),datename(dw,dateadd(dd,10,@mm))
if(@dd='星期二')
select '本月的第二个星期四是:',dateadd(dd,9,@mm),datename(dw,dateadd(dd,9,@mm))
if(@dd='星期三')
select '本月的第二个星期四是:',dateadd(dd,8,@mm),datename(dw,dateadd(dd,8,@mm))
if(@dd='星期四')
select '本月的第二个星期四是:',dateadd(dd,14,@mm),datename(dw,dateadd(dd,14,@mm))
if(@dd='星期五')
select '本月的第二个星期四是:',dateadd(dd,13,@mm),datename(dw,dateadd(dd,13,@mm))
if(@dd='星期六')
select '本月的第二个星期四是:',dateadd(dd,12,@mm),datename(dw,dateadd(dd,12,@mm))
if(@dd='星期日')
select '本月的第二个星期四是:',dateadd(dd,11,@mm),datename(dw,dateadd(dd,11,@mm))已通过测试。
你可以通过dateadd, datepart来简化你的程序.
没有必要用那么多if语句.