求一条sql 语句 传入月份 直接输出 这个月的每一天和日期列表2011-6-1,  星期三
20011-6-2,星期四
20011-6-3,星期五
20011-6-4,星期六
20011-6-5,星期日
20011-6-6,星期一
20011-6-7,星期二
20011-6-8,星期三
20011-6-9,星期四.....2011-6-30,星期四

解决方案 »

  1.   

    DECLARE @Month varchar(6)set  @Month='200801'
     SELECT
      CONVERT(VARCHAR(8),DATEADD(day,number,@Month+'01'),112)
    FROM 
      master..spt_values 
    WHERE 
      type='P' 
    and 
     datediff(mm,DATEADD(day,number,@Month+'01'),@Month+'01')=0
      

  2.   


    DECLARE @Month varchar(6)set  @Month='200801'
     SELECT
      CONVERT(VARCHAR(8),DATEADD(day,number,@Month+'01'),112),
      datename(weekday,CONVERT(VARCHAR(8),DATEADD(day,number,@Month+'01'),112))
    FROM 
      master..spt_values 
    WHERE 
      type='P' 
    and 
     datediff(mm,DATEADD(day,number,@Month+'01'),@Month+'01')=0
      

  3.   


    create table #t_dt(dt datetime,wk varchar(10) )
    declare @bdt datetime
    declare @edt datetime
    set @bdt = '2011-06-01'--定义的变量
    select @edt = dateadd(day,-1,left(convert(varchar(10),dateadd(month,1,@bdt),120),7) + '-01')
    while @bdt <= @edt
    begin
    insert into #t_dt(dt,wk)
    select @bdt,case datepart(weekday,@bdt) 
    when 1 then '星期日'
    when 2 then '星期一'  
    when 3 then '星期二'   
    when 4 then '星期三'
    when 5 then '星期四'  
    when 6 then '星期五'  
    when 7 then '星期六' end
    set @bdt = dateadd(day,1,@bdt)
    endselect * from #t_dt order by dtdrop table #t_dt
      

  4.   

    DECLARE @Month varchar(6)set  @Month='200801'
     SELECT
      CONVERT(VARCHAR(8),DATEADD(day,number,@Month+'01'),112)+','+
      datename(weekday,CONVERT(VARCHAR(8),DATEADD(day,number,@Month+'01'),112))
    FROM 
      master..spt_values 
    WHERE 
      type='P' 
    and 
     datediff(mm,DATEADD(day,number,@Month+'01'),@Month+'01')=0
      

  5.   


    declare @i varchar(2)
    set @i = 6select ltrim(year(getdate()))+'-'+right('00'+@i,2)+'-'+right(100+number,2),
    datename(weekday,convert(datetime,ltrim(year(getdate()))+'-'+right('00'+@i,2)+'-'+right(100+number,2)))
    from master..spt_values
    where [type] = 'p' and number between 1 
    and datediff(dd,
    convert(datetime,ltrim(year(getdate()))+'-'+right('00'+@i,2)+'-01'),
    dateadd(dd,-1,dateadd(mm,1,convert(datetime,ltrim(year(getdate()))+'-'+right('00'+@i,2)+'-01')))) + 1
    /*                       
    ---------------------- ------------------------------
    2011-06-01             星期三
    2011-06-02             星期四
    2011-06-03             星期五
    2011-06-04             星期六
    2011-06-05             星期日
    2011-06-06             星期一
    2011-06-07             星期二
    2011-06-08             星期三
    2011-06-09             星期四
    2011-06-10             星期五
    2011-06-11             星期六
    2011-06-12             星期日
    2011-06-13             星期一
    2011-06-14             星期二
    2011-06-15             星期三
    2011-06-16             星期四
    2011-06-17             星期五
    2011-06-18             星期六
    2011-06-19             星期日
    2011-06-20             星期一
    2011-06-21             星期二
    2011-06-22             星期三
    2011-06-23             星期四
    2011-06-24             星期五
    2011-06-25             星期六
    2011-06-26             星期日
    2011-06-27             星期一
    2011-06-28             星期二
    2011-06-29             星期三
    2011-06-30             星期四(30 行受影响)
      

  6.   

    --用datename更简单一点create table #t_dt(dt datetime,wk varchar(10) )
    declare @bdt datetime
    declare @edt datetime
    set @bdt = '2011-06-01'--定义的变量
    select @edt = dateadd(day,-1,left(convert(varchar(10),dateadd(month,1,@bdt),120),7) + '-01')
    while @bdt <= @edt
    begin
    insert into #t_dt(dt,wk)
    select @bdt,datename(weekday,@bdt )
    set @bdt = dateadd(day,1,@bdt)
    endselect * from #t_dt order by dtdrop table #t_dt
      

  7.   

    --只要 getdate() 那里改为你要 的日期就行
    IF not object_id('tempdb..#MyDates') is null
    drop table #MyDatesCREATE TABLE #MyDates
    (
     DateID  INT   NOT NULL
    , TheDate  DATETIME NOT NULL
    , DayOfMonth INT   NOT NULL
    , DayOfYear INT   NOT NULL
    , DayOfWeek INT   NOT NULL
    , DayName  VARCHAR(9) NOT NULL
    , WeekOfYear INT   NOT NULL
    , WeekName VARCHAR(7) NOT NULL
    , MonthOfYear INT   NOT NULL
    , MonthName VARCHAR(9) NOT NULL
    , Quarter  INT   NOT NULL
    , QuarterName CHAR(6)  NOT NULL
    , Year  INT   NOT NULL
    ,
    )
    DECLARE @startdate DATETIME
    DECLARE @enddate DATETIME
    DECLARE @date  DATETIME
    DECLARE @id   INT
    SET  @startdate =  CONVERT(varchar(6) , getdate(), 112 ) + '01'   --Change these to 
    SET  @enddate = CONVERT(varchar(6) , dateadd(month,1,getdate()), 112 ) + '01'   --whatever you want
    SET  @id   = 0
    SET  @date  = DATEADD(dd, @id, @startdate)WHILE @date < @enddate
    BEGIN
     INSERT INTO #MyDates
     VALUES ( @id            --DateID
     ,   @date           --TheDate
     ,   DATEPART(dd, @date)        --DayOfMonth
     ,   DATEPART(dy, @date)        --DayOfYear
     ,   DATEPART(dw, @date)        --DayOfWeek
     ,   DATENAME(dw, @date)        --DayName
     ,   DATEPART(ww, @date)        --WeekOfYear
     ,   'Week ' + DATENAME(ww, @date)     --WeekName
     ,   DATEPART(mm, @date)        --MonthOfYear
     ,   DATENAME(mm, @date)        --MonthName
     ,   DATEPART(qq, @date)        --Quarter
     ,   'Q' + DATENAME(qq, @date) + DATENAME(yy, @date) --QuarterName
     ,   DATEPART(yy, @date)        --Year
     ) SET @id  = @id + 1
     SET @date = DATEADD(dd, @id, @startdate)END select * from #MyDates
    GO
    /*
    0 2011-06-01 00:00:00.000 1 152 4 星期三
    1 2011-06-02 00:00:00.000 2 153 5 星期四
    2 2011-06-03 00:00:00.000 3 154 6 星期五
    3 2011-06-04 00:00:00.000 4 155 7 星期六
    4 2011-06-05 00:00:00.000 5 156 1 星期日
    5 2011-06-06 00:00:00.000 6 157 2 星期一
    6 2011-06-07 00:00:00.000 7 158 3 星期二
    7 2011-06-08 00:00:00.000 8 159 4 星期三
    8 2011-06-09 00:00:00.000 9 160 5 星期四
    9 2011-06-10 00:00:00.000 10 161 6 星期五
    10 2011-06-11 00:00:00.000 11 162 7 星期六
    11 2011-06-12 00:00:00.000 12 163 1 星期日
    12 2011-06-13 00:00:00.000 13 164 2 星期一
    13 2011-06-14 00:00:00.000 14 165 3 星期二
    14 2011-06-15 00:00:00.000 15 166 4 星期三
    15 2011-06-16 00:00:00.000 16 167 5 星期四
    16 2011-06-17 00:00:00.000 17 168 6 星期五
    17 2011-06-18 00:00:00.000 18 169 7 星期六
    18 2011-06-19 00:00:00.000 19 170 1 星期日
    19 2011-06-20 00:00:00.000 20 171 2 星期一
    20 2011-06-21 00:00:00.000 21 172 3 星期二
    21 2011-06-22 00:00:00.000 22 173 4 星期三
    22 2011-06-23 00:00:00.000 23 174 5 星期四
    23 2011-06-24 00:00:00.000 24 175 6 星期五
    24 2011-06-25 00:00:00.000 25 176 7 星期六
    25 2011-06-26 00:00:00.000 26 177 1 星期日
    26 2011-06-27 00:00:00.000 27 178 2 星期一
    27 2011-06-28 00:00:00.000 28 179 3 星期二
    28 2011-06-29 00:00:00.000 29 180 4 星期三
    29 2011-06-30 00:00:00.000 30 181 5 星期四
    */