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)

解决方案 »

  1.   

    --楼主不知道是问哪个问题?
    --1:在SQL中怎么获得已知日期是星期几?
    select datename(weekday,getdate()) 
    --进来一看是:
    --2:我想在Sql中或得已知月份的第二个星期四.该怎么处理?
    --没有看明白!^_^!
      

  2.   

    --按照楼主的旨意, 我全部通过日期函数来实现.(测试了好几个月都没有问题)--在@month中设置为相应的月份, 年份取当前年份
    --最终结果存在@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
      

  3.   

    select datename(dw,日期字段的列) from table1
      

  4.   

    ---补充一下:
    --思路是得到某个月的第一天是星期几,然后通过判断运算得到某个月的第二个星期四。--首先声明两个变量,
    --@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))已通过测试。
      

  5.   

    to楼上:
          你可以通过dateadd, datepart来简化你的程序.
          没有必要用那么多if语句.