Test it (version for MS SQL Server 20005):
DECLARE @startDate DATETIME
DECLARE @endDate DATETIME
SET DATEFORMAT ymd;
SET @startDate = CONVERT(DATETIME, CONVERT(VARCHAR(10),YEAR(GETDATE())) + '-' + CONVERT(VARCHAR(10),MONTH(GETDATE())) + '-01')
SET @endDate = DATEADD(dd,-1,DATEADD(mm,1,@startDate))
SET @startDate = '2013-06-01'
SET @endDate = '2013-06-30'
;WITH fullmonth AS
(
SELECT @startDate AS aDate, DATENAME(dw,@startDate) AS NameOfDate
UNION ALL
SELECT DATEADD(dd,1,aDate) AS aDate, DATENAME(dw,DATEADD(dd,1,aDate)) AS NameOfDate
FROM fullmonth
WHERE aDate<@endDate
)
SELECT CONVERT(VARCHAR(10),aDate,121) AS aDate, NameOfDate
FROM (
SELECT *,
(SELECT MIN(aDate) FROM fullmonth WHERE NameOfDate = 'Wednesday') AS MinDate,
(SELECT MAX(aDate) FROM fullmonth WHERE NameOfDate = 'Wednesday' AND MONTH(aDate) NOT IN (3,6,9,12)) AS MaxDate
FROM fullmonth
) AS T
WHERE aDate BETWEEN MinDate AND COALESCE(MaxDate, @endDate)
Above code generates set of dates for actual month ;)
2013-06-05 Wednesday
2013-06-06 Thursday
2013-06-07 Friday
2013-06-08 Saturday
2013-06-09 Sunday
2013-06-10 Monday
2013-06-11 Tuesday
2013-06-12 Wednesday
2013-06-13 Thursday
2013-06-14 Friday
2013-06-15 Saturday
2013-06-16 Sunday
2013-06-17 Monday
2013-06-18 Tuesday
2013-06-19 Wednesday
2013-06-20 Thursday
2013-06-21 Friday
2013-06-22 Saturday
2013-06-23 Sunday
2013-06-24 Monday
2013-06-25 Tuesday
2013-06-26 Wednesday
2013-06-27 Thursday
2013-06-28 Friday
2013-06-29 Saturday
2013-06-30 Sunday