create table test
(
[id] int identity(1,1) not null,
[dates] date not null
)-----------
假如有这么一个表,我想利用SQL语句查出所有当前周的数据,即今天是19日礼拜四,我想查出属于这一周的所有数据.

解决方案 »

  1.   


    select * from test where
    datediff(dd,DATEADD(mm, DATEDIFF(mm,0,getdate()), 0),dates) between 0 and 7
      

  2.   

    SELECT *
    FROM test
    WHERE [dates] BETWEEN DATEADD(day,-(@@datefirst+1)%7,DATEADD(week,DATEDIFF(week,0,GETDATE()),0))
        AND DATEADD(day,-(@@datefirst+1)%7,DATEADD(week,DATEDIFF(week,0,GETDATE()),0))+6
      

  3.   


    不好意思,写的太快,没看清题
    正确的应该是
    select * from test where
    datediff(dd,DATEADD(wk, DATEDIFF(wk,0,getdate()), 0),dates) between 0 and 7
      

  4.   


    附上一些有意思的东西1.一个月第一天的
    Select DATEADD(mm, DATEDIFF(mm,0,getdate()), 0)2.本周的星期一
    Select DATEADD(wk, DATEDIFF(wk,0,getdate()), 0)3.一年的第一天
    Select DATEADD(yy, DATEDIFF(yy,0,getdate()), 0)4.季度的第一天
    Select DATEADD(qq, DATEDIFF(qq,0,getdate()), 0)5.当天的半夜
    Select DATEADD(dd, DATEDIFF(dd,0,getdate()), 0)6.上个月的最后一天
    Select dateadd(ms,-3,DATEADD(mm, DATEDIFF(mm,0,getdate()), 0))7.去年的最后一天
    Select dateadd(ms,-3,DATEADD(yy, DATEDIFF(yy,0,getdate()), 0))8.本月的最后一天
    Select dateadd(ms,-3,DATEADD(mm, DATEDIFF(m,0,getdate())+1, 0))9.本年的最后一天
    Select dateadd(ms,-3,DATEADD(yy, DATEDIFF(yy,0,getdate())+1, 0))10.本月的第一个星期一
    select DATEADD(wk, DATEDIFF(wk,0,dateadd(dd,6-datepart(day,getdate()),getdate())), 0) 
      

  5.   


    select * from test where datediff(dd, dateadd(ww, datediff(ww,0,getdate()), 0), dates) between 0 and 6
      

  6.   

    select * from test where dates between dateadd(wk,datediff(wk,0,getdate()),0) and dateadd(wk,datediff(wk,0,getdate()),6)
      

  7.   


    select * from test where dates between dateadd(wk,datediff(wk,0,getdate()),0) and dateadd(wk,datediff(wk,0,getdate()),6)
      

  8.   

    顶二楼,加入@@datefirst,不受系统环境的影响