包括C#方法和SQL方法。

C#

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("输入日期,并回车(0退出):");
            string d1 = Console.ReadLine();
            while (d1 != "0")
            {
                DateTime dt = Convert.ToDateTime(d1);
                List<MyDate> datelist = DateUtil.GetWeekOfMonth(dt);
                Console.WriteLine(dt.Year+""+dt.Month+"月包含【"+datelist.Count+"】周:");
                foreach (var d in datelist)
                {
                    Console.WriteLine(d.firstDate + "\t" + d.lastDate);
                }
                d1 = Console.ReadLine();
            }
        }
    }

    class DateUtil{
        #region 获取时间(周,月)
        public static DateTime GetWeekDateStart(DateTime? date)
        {
            DateTime currentdate = date.HasValue ? date.Value : DateTime.Now;
            //本周
            int weeknow = Convert.ToInt32(currentdate.DayOfWeek);
            //星期日 获取weeknow为0
            weeknow = weeknow == 0 ? 7 : weeknow;
            int daydiff = (-1) * weeknow + 1;
            //本周第一天
            return currentdate.AddDays(daydiff);
        }
        public static DateTime GetWeekDateEnd(DateTime? date)
        {
            DateTime currentdate = date.HasValue ? date.Value : DateTime.Now;
            //本周
            int weeknow = Convert.ToInt32(currentdate.DayOfWeek);
            //星期日 获取weeknow为0
            weeknow = weeknow == 0 ? 7 : weeknow;
            int dayadd = 7 - weeknow;
            //本周最后一天
            return currentdate.AddDays(dayadd);
        }
        public static DateTime GetMonthDateStart(DateTime? date)
        {
            DateTime currentdate = date.HasValue ? date.Value : DateTime.Now;
            //本月第一天时间 
            DateTime firstDate = currentdate.AddDays(-(currentdate.Day) + 1);
            return firstDate;
        }
        public static DateTime GetMonthDateEnd(DateTime? date)
        {
            DateTime currentdate = date.HasValue ? date.Value : DateTime.Now;
            DateTime dt = currentdate;
            //将本月月数+1 
            DateTime dt2 = dt.AddMonths(1);
            //本月最后一天时间 
            DateTime lastDate = dt2.AddDays(-(dt.Day));
            return lastDate;
        }

        /// <summary>
        /// 获取月份内的周时间段
        /// </summary>
        /// <param name="crdate">时间</param>
        /// <returns>当月周时间段</returns>
        public static List<MyDate> GetWeekOfMonth(DateTime? crdate)
        {
            List<MyDate> dateList = new List<MyDate>();

            DateTime currentdate = crdate.HasValue ? crdate.Value : DateTime.Now;
            DateTime firstDayofMonth = GetMonthDateStart(currentdate);
            DateTime lastDayofMonth = GetMonthDateEnd(currentdate);

            DateTime Week1firstday = GetWeekDateStart(firstDayofMonth);
            Week1firstday = Week1firstday < firstDayofMonth ? firstDayofMonth : Week1firstday;
            
            //第一周
            MyDate date1 = new MyDate();
            date1.firstDate = Week1firstday;
            date1.lastDate = GetWeekDateEnd(firstDayofMonth);
            dateList.Add(date1);
            //第二周
            MyDate date2 = new MyDate();
            DateTime Week2firstday = Week1firstday.AddDays(7);
            date2.firstDate = GetWeekDateStart(Week2firstday); ;
            date2.lastDate = GetWeekDateEnd(Week2firstday);
            dateList.Add(date2);
            //第三周
            MyDate date3 = new MyDate();
            DateTime Week3firstday = Week2firstday.AddDays(7);
            date3.firstDate = GetWeekDateStart(Week3firstday); ;
            date3.lastDate = GetWeekDateEnd(Week3firstday);
            dateList.Add(date3);
            //第四周
            MyDate date4 = new MyDate();
            DateTime Week4firstday = Week3firstday.AddDays(7);
            if (Week4firstday > lastDayofMonth)
            { Week4firstday = lastDayofMonth; }
            date4.firstDate = GetWeekDateStart(Week4firstday);
            date4.lastDate = GetWeekDateEnd(Week4firstday);
            if (date4.firstDate > lastDayofMonth)
            {
                return dateList;
            }
            if (date4.lastDate >= lastDayofMonth)
            {
                date4.lastDate = lastDayofMonth;
                dateList.Add(date4);
                return dateList;
            }
            dateList.Add(date4);
            //第五周
            MyDate date5 = new MyDate();
            DateTime Week5firstday = Week4firstday.AddDays(7);
            if (Week5firstday > lastDayofMonth)
            { Week5firstday = lastDayofMonth; }
            date5.firstDate = GetWeekDateStart(Week5firstday);
            date5.lastDate = GetWeekDateEnd(Week5firstday);
            if (date5.firstDate > lastDayofMonth)
            {
                return dateList;
            }
            if (date5.lastDate >= lastDayofMonth)
            {
                date5.lastDate = lastDayofMonth;
                dateList.Add(date5);
                return dateList;
            }
            dateList.Add(date5);
            //第六周
            MyDate date6 = new MyDate();
            DateTime Week6firstday = Week5firstday.AddDays(7);
            if (Week6firstday > lastDayofMonth)
            { Week6firstday = lastDayofMonth; }
            date6.firstDate = GetWeekDateStart(Week6firstday);
            date6.lastDate = GetWeekDateEnd(Week6firstday);
            if (date6.firstDate > lastDayofMonth)
            {
                return dateList;
            }
            if (date6.lastDate >= lastDayofMonth)
            {
                date6.lastDate = lastDayofMonth;
                dateList.Add(date6);
                return dateList;
            }
            dateList.Add(date6);
            return dateList;
        }
        #endregion
    }

    class MyDate
    {
        public DateTime firstDate { get; set; }
        public DateTime lastDate { get; set; }
    }
}

测试示例:

SQL

DECLARE @ym VARCHAR(7)
SET @ym = '2013-12'
SET datefirst 1
SELECT  wk ,
        MIN(d) d1 ,
        MAX(d) d2
FROM    ( SELECT    DATEPART(wk, d) wk ,
                    d
          FROM      ( SELECT    DATEADD(D, number, @ym + '-01') d
                      FROM      master..spt_values
                      WHERE     type = 'p'
                                AND CONVERT(VARCHAR(7), DATEADD(D, number,
                                                              @ym + '-01'), 120) = @ym
                    ) t
        ) t
GROUP BY wk

测试示例:

 

另mark周几获取方法

public string Week()
        {
            string[] weekdays = { "星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六" };
            string week = weekdays[Convert.ToInt32(DateTime.Now.DayOfWeek)];
            return week;
        }