Technical Article

Calendar Display with Language Specific Day/Month names

,

Run the script to create the SP. Execute through query-analyzer as follows :

EXEC spTST_CalendarDisplay 2008,'English'

SET QUOTED_IDENTIFIER ON 
GO
SET ANSI_NULLS ON 
GO

ALTER PROCEDURE dbo.spTST_CalendarDisplay
(
    @inYear as int,
    @vcLanguage varchar(130)
)
AS
SET NOCOUNT ON
BEGIN
 --**********************************************************************************************************
 -- Description - A stored procedure which will build up a calendar display for a specific year
 -- Parameters  - @inYear = Integer value of the year to be displayed
 --             - @vcLangauge = String reference to determine the month and day name display
 --                             Must refer to an alias in the syslanguages table
 -- Programmer  - Darren Sunderland
 -- Date        - 04 March 2008
 --**********************************************************************************************************

 SET DATEFIRST 1
 DECLARE @tbFullYear TABLE 
(
WeekNo int,MonthNo int,    Day1 varchar(2),Day2 varchar(2),
  Day3 varchar(2),Day4 varchar(2),Day5 varchar(2),
  Day6 varchar(2),Day7 varchar(2)
 )
 DECLARE @tbReturn TABLE
 (
  RowID int IDENTITY(1,1),WeekNumber varchar(20),Day1 varchar(10),
  Day2 varchar(10),Day3 varchar(10),Day4 varchar(10),
  Day5 varchar(10),Day6 varchar(10),Day7 varchar(10)
 )
 DECLARE @tbDays TABLE
 (
  Blank varchar(20),Day1 varchar(10),
  Day2 varchar(10),Day3 varchar(10),
  Day4 varchar(10),Day5 varchar(10),
  Day6 varchar(10),Day7 varchar(10)
 )
 DECLARE @inWeek int
 DECLARE @inCount int
 DECLARE @inDays int
 DECLARE @dtStart datetime
 DECLARE @vcMonths varchar(200)
 DECLARE @vcDays varchar(100)
 
 -- Initialise settings
 SET @inWeek = 1
 SET @inCount = 0
 SET @dtStart = CONVERT(datetime,CAST(@inYear as char(4))+'-01-01')
 SELECT @vcMonths=months+',',@vcDays=days+',' FROM [master].[dbo].[syslanguages] WHERE [alias]=@vcLanguage

 -- Build up day names for language setting
 INSERT INTO @tbDays VALUES('','','','','','','','')
 SET @inDays = 1
 WHILE @inDays < 8 BEGIN
  IF @inDays=1
   UPDATE @tbDays SET Day1=LEFT(@vcDays,CHARINDEX(',',@vcDays)-1)
  ELSE IF @inDays=2
   UPDATE @tbDays SET Day2=LEFT(@vcDays,CHARINDEX(',',@vcDays)-1)
  ELSE IF @inDays=3
   UPDATE @tbDays SET Day3=LEFT(@vcDays,CHARINDEX(',',@vcDays)-1)
  ELSE IF @inDays=4
   UPDATE @tbDays SET Day4=LEFT(@vcDays,CHARINDEX(',',@vcDays)-1)
  ELSE IF @inDays=5
   UPDATE @tbDays SET Day5=LEFT(@vcDays,CHARINDEX(',',@vcDays)-1)
  ELSE IF @inDays=6
   UPDATE @tbDays SET Day6=LEFT(@vcDays,CHARINDEX(',',@vcDays)-1)
  ELSE IF @inDays=7
   UPDATE @tbDays SET Day7=LEFT(@vcDays,CHARINDEX(',',@vcDays)-1)
  SET @vcDays = RIGHT(@vcDays,LEN(@vcDays)-CHARINDEX(',',@vcDAys))
  SET @inDays = @inDays+1
 END
 
 -- Build up full year calendar
 WHILE YEAR(@dtStart)=@inYear BEGIN
  IF (DATEPART(day,@dtStart)=1 AND DATEPART(weekday,@dtStart)<>'1') OR (DATEPART(day,@dtStart)=1 AND DATEPART(month,@dtStart)=1)
   INSERT INTO @tbFullYear (WeekNo,MonthNo)VALUES(@inWeek,DATEPART(month,DATEADD(day,1,@dtStart)))
  IF DATEPART(weekday,@dtStart) = 1
   UPDATE @tbFullYear SET Day1=DATEPART(day,@dtStart) WHERE WeekNo=@inWeek AND MonthNo=DATEPART(month,@dtStart)
  ELSE IF DATEPART(weekday,@dtStart) = 2
   UPDATE @tbFullYear SET Day2=DATEPART(day,@dtStart) WHERE WeekNo=@inWeek AND MonthNo=DATEPART(month,@dtStart)
  ELSE IF DATEPART(weekday,@dtStart) = 3
   UPDATE @tbFullYear SET Day3=DATEPART(day,@dtStart) WHERE WeekNo=@inWeek AND MonthNo=DATEPART(month,@dtStart)
  ELSE IF DATEPART(weekday,@dtStart) = 4
   UPDATE @tbFullYear SET Day4=DATEPART(day,@dtStart) WHERE WeekNo=@inWeek AND MonthNo=DATEPART(month,@dtStart)
  ELSE IF DATEPART(weekday,@dtStart) = 5
   UPDATE @tbFullYear SET Day5=DATEPART(day,@dtStart) WHERE WeekNo=@inWeek AND MonthNo=DATEPART(month,@dtStart)
  ELSE IF DATEPART(weekday,@dtStart) = 6
   UPDATE @tbFullYear SET Day6=DATEPART(day,@dtStart) WHERE WeekNo=@inWeek AND MonthNo=DATEPART(month,@dtStart)
  ELSE IF DATEPART(weekday,@dtStart) = 7 BEGIN
  UPDATE @tbFullYear SET Day7=DATEPART(day,@dtStart) WHERE WeekNo=@inWeek AND MonthNo=DATEPART(month,@dtStart)
   SET @inWeek = @inWeek + 1
 INSERT INTO @tbFullYear (WeekNo,MonthNo)VALUES(@inWeek,DATEPART(month,DATEADD(day,1,@dtStart)))
END
  SET @inCount = @inCount + 1
  SET @dtStart = DATEADD(day,1,@dtStart)
 END

 -- Remove null values
 UPDATE @tbFullYear SET Day1='' WHERE Day1 IS NULL
 UPDATE @tbFullYear SET Day2='' WHERE Day2 IS NULL
 UPDATE @tbFullYear SET Day3='' WHERE Day3 IS NULL
 UPDATE @tbFullYear SET Day4='' WHERE Day4 IS NULL
 UPDATE @tbFullYear SET Day5='' WHERE Day5 IS NULL
 UPDATE @tbFullYear SET Day6='' WHERE Day6 IS NULL
 UPDATE @tbFullYear SET Day7='' WHERE Day7 IS NULL

 -- Build up output display
 SET @inCount = 1
 WHILE @inCount < 13 BEGIN
 INSERT INTO @tbReturn SELECT CAST(' 'as char(2)),'','',LEFT(@vcMonths,CHARINDEX(',',@vcMonths)-1),CAST(@inYear as char(4)),'','',''
 SET @vcMonths=RIGHT(@vcMonths,LEN(@vcMonths)-CHARINDEX(',',@vcMonths))
 INSERT INTO @tbReturn SELECT * FROM @tbDays
 INSERT INTO @tbReturn SELECT CAST(WeekNo as varchar(2)),Day1,Day2,Day3,Day4,Day5,Day6,Day7 FROM @tbFullYear WHERE MonthNo=@inCount
 INSERT INTO @tbReturn SELECT ' ','','','','','','',''
  SET @inCount = @inCount + 1
 END

 SELECT WeekNumber,Day1,Day2,Day3,Day4,Day5,Day6,Day7 FROM @tbReturn ORDER BY RowID
END
GO
SET QUOTED_IDENTIFIER OFF 
GO
SET ANSI_NULLS ON 
GO

Rate

4.6 (10)

You rated this post out of 5. Change rating

Share

Share

Rate

4.6 (10)

You rated this post out of 5. Change rating