﻿<?xml version='1.0' encoding='UTF-8'?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/"><channel><title>SQLServerCentral / Article Discussions / Article Discussions by Author / Discuss content posted by Bernabe Diaz  / Print Text Month Calendar / Latest Posts</title><generator>InstantForum.NET v2.9.0</generator><description>SQLServerCentral</description><link>http://www.sqlservercentral.com/Forums/</link><webMaster>notifications@sqlservercentral.com</webMaster><lastBuildDate>Wed, 22 May 2013 21:07:19 GMT</lastBuildDate><ttl>20</ttl><item><title>RE: Print Text Month Calendar</title><link>http://www.sqlservercentral.com/Forums/Topic1390244-1509-1.aspx</link><description>Bill, I like your version!Thanks.</description><pubDate>Wed, 09 Jan 2013 12:15:37 GMT</pubDate><dc:creator>diaz.bernabe</dc:creator></item><item><title>RE: Print Text Month Calendar</title><link>http://www.sqlservercentral.com/Forums/Topic1390244-1509-1.aspx</link><description>Here is a maintainable version...[code="other"]DECLARE	@dt datetime,	@DayOneDayOfWeek int,	@DaysInMonth int,	@s varchar(200),	@crlf varchar(2);SET @dt = '20130401';SET @crlf = char(13) + char(10);-- get max days in month: calculate first day of the next month and subtract one daySET @DaysInMonth = (select datepart(day, dateadd(day, -1, dateadd(month, 1, cast(convert(varchar(8), @dt, 121)+'01' as datetime)))));-- need to know day one weekdaySET @DayOneDayOfWeek = (select DatePart(WeekDay, cast(convert(varchar(8), @dt, 121)+'01' as datetime)));-- build day numbers string and pad for first daySET @s = REPLACE(SUBSTRING(' &amp;lt;&amp;lt;  January YEAR  &amp;gt;&amp;gt; &amp;lt;&amp;lt; February YEAR  &amp;gt;&amp;gt; &amp;lt;&amp;lt;   March YEAR   &amp;gt;&amp;gt; &amp;lt;&amp;lt;   April YEAR   &amp;gt;&amp;gt; &amp;lt;&amp;lt;    May YEAR    &amp;gt;&amp;gt; &amp;lt;&amp;lt;   June YEAR    &amp;gt;&amp;gt; &amp;lt;&amp;lt;   July YEAR    &amp;gt;&amp;gt; &amp;lt;&amp;lt;  August YEAR   &amp;gt;&amp;gt; &amp;lt;&amp;lt; September YEAR &amp;gt;&amp;gt; &amp;lt;&amp;lt;  October YEAR  &amp;gt;&amp;gt; &amp;lt;&amp;lt; November YEAR  &amp;gt;&amp;gt; &amp;lt;&amp;lt; December YEAR  &amp;gt;&amp;gt;', (DatePart(month, @dt) - 1) * 21 + 1, 21), 'YEAR', cast(DatePart(year, @dt) as varchar(4)))	+ ' Su Mo Tu We Th Fr Sa' 	+ replicate('   ', @DayOneDayOfWeek - 1)	+ left('  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31', @DaysInMonth * 3);-- Format for display by removing leading space and adding CRLF for each line.print 	SUBSTRING(@s, 2, 20)	+ @crlf + SUBSTRING(@s, 23, 20)	+ @crlf + SUBSTRING(@s, 44, 20)	+ @crlf + SUBSTRING(@s, 65, 20)	+ @crlf + SUBSTRING(@s, 86, 20)	+ @crlf + SUBSTRING(@s, 107, 20)	+ @crlf + SUBSTRING(@s, 128, 20)	+ case when len(@s) &amp;gt; 149 then @crlf + SUBSTRING(@s, 149, 20) else '' end;[/code]</description><pubDate>Fri, 28 Dec 2012 09:28:11 GMT</pubDate><dc:creator>Bill Talada</dc:creator></item><item><title>RE: Print Text Month Calendar</title><link>http://www.sqlservercentral.com/Forums/Topic1390244-1509-1.aspx</link><description>Hi Bernabe,Nice idea if you have the need.I was thinking of a less procedural approach and came up with this.Given a "Calendar Table" with the following definitionCREATE TABLE [dbo].[Dates](	[CalendarDate] [smalldatetime] NOT NULL,	[isWeekday] [bit] NULL,	[isHoliday] [bit] NULL,	[CalendarYear] [smallint] NULL,	[CalendarQuarter] [tinyint] NULL,	[CalendarMonth] [tinyint] NULL,	[FinancialYear] [smallint] NULL,	[FinancialQuarter] [tinyint] NULL,	[FinancialMonth] [tinyint] NULL,	[DayOfMonth] [tinyint] NULL,	[DayOfWeek] [tinyint] NULL,	[MonthName] [varchar](9) NULL,	[ShortMonthName] [char](3) NULL,	[DayName] [varchar](9) NULL,	[ShortDayName] [char](3) NULL,	[SQL_Week] [tinyint] NULL,	[Week] [tinyint] NULL,	[HolidayDescription] [varchar](255) NULL) ON [PRIMARY]the following T-SQL seems to work quite wellDECLARE @supplieddate DATETIMEDECLARE @lastdayofmonth DATETIMEDECLARE @firstdayofmonth DATETIMEDECLARE @dayofweek INTDECLARE @calendarbody VARCHAR(MAX)DECLARE @title VARCHAR(MAX)DECLARE @monthname VARCHAR(12)DECLARE @paddedmonthname VARCHAR(24)DECLARE @newline CHAR	SET @newline = CHAR(13)SET @supplieddate = DATEADD(MONTH,-0,CURRENT_TIMESTAMP)SELECT	@dayofweek = DATEPART(dw,MIN(CalendarDate)),	@firstdayofmonth = MIN(CalendarDate),	@lastdayofmonth = MAX(CalendarDate),	@monthname=DATENAME(MONTH,@supplieddate)FROM DatesWHERE CalendarMonth = MONTH(@supplieddate) AND CalendarYear = YEAR(@supplieddate)GROUP BY CalendarMonth, CalendarYear	SET @paddedmonthname =	REPLICATE(' ',6) +			@monthname + 			' ' + 			RTRIM(CAST(YEAR(@supplieddate) AS CHAR)) + 			REPLICATE(' ',6 + (LEN(@monthname) % 2))	SET @title = ' &amp;lt;&amp;lt;' + 	SUBSTRING(@paddedmonthname, (LEN(@paddedmonthname) / 2) - 4 + (LEN(@paddedmonthname) % 2), 16) +	'&amp;gt;&amp;gt;'	+@newline	+' Su Mo Tu We Th Fr Sa';SET @calendarbody = REPLICATE(' ', 3 * (@dayofweek - 1))SELECT	@calendarbody = @calendarbody +               RIGHT('   ' + CAST(DayofMonth AS VARCHAR(5)),3) +              (CASE WHEN DayOfWeek = 7 THEN @newline ELSE '' END)	FROM Dates	WHERE CalendarMonth = MONTH(@supplieddate) AND CalendarYear = YEAR(@supplieddate)PRINT @title + @newline + @calendarbodyI realise that I am using the quirky update feature, but thought it was OK for nowMy apologies for the poor formatting,Pete</description><pubDate>Fri, 30 Nov 2012 02:57:38 GMT</pubDate><dc:creator>Pete Cox</dc:creator></item><item><title>Print Text Month Calendar</title><link>http://www.sqlservercentral.com/Forums/Topic1390244-1509-1.aspx</link><description>Comments posted to this topic are about the item [B]&lt;A HREF="/scripts/T+-+SQL/94659/"&gt;Print Text Month Calendar&lt;/A&gt;[/B]</description><pubDate>Wed, 28 Nov 2012 20:34:31 GMT</pubDate><dc:creator>diaz.bernabe</dc:creator></item></channel></rss>