Please start any new threads on our new
site at https://forums.sqlteam.com. We've got lots of great SQL Server
experts to answer whatever question you can come up with.
| Author |
Topic |
|
mk
Starting Member
2 Posts |
Posted - 2007-10-20 : 09:46:47
|
| Hi, If some could please help me out with my current problem that would be greatly appreciated.I am having problem with a stored precedure to create Calander table. I have created this code a while ago and now i am just playing with it.What i am trying to do is replace 'CASE' statement with IF/ELSE.... As i have changed the code for "FiscalQuarter" it does not work... I got a hunch that it's something small i am missing out..Can someone please help? Below is my code, /*Code for Calendar creation*//* Crated By : Mehbub Khan This stored procedure creates a financial calendar, like Fiscal year, FiscalMonth, FiscalQuarter etc. Restriction : It only tracks date from 01/07/1997 till 30/06/2011*/CREATE PROC sp_Fiscal_CalendarASCREATE TABLE FiscalCalendar( [Date] smalldatetime, [Day] AS day([Date]), [DayOfWeek] AS datepart(dw, [Date]), [FiscalQuarterName] AS CAST(IF( datepart(q, [Date]) = 0) 'FY' + RIGHT(CAST((datepart(yy,[Date])) as varchar(4)), 2) +'-Q' + CAST((datepart(q, [Date])+2)as varchar(7)) ELSE 'FY' + RIGHT(CAST((datepart(yy,[Date])+ 1) AS VARCHAR(4)), 2) +'-Q' + CAST((datepart(q, [Date])-1)as varchar(7)) as varchar(7)), [FiscalMonthName] AS DATENAME(MONTH, [Date]) +', ' + DATENAME(YEAR, [Date]), [FiscalYearName] AS CAST(CASE WHEN datepart(mm, [Date]) <= 6 THEN 'FY' + RIGHT(CAST((datepart(yy,[Date])) as varchar(4)), 2) ELSE 'FY' + RIGHT(CAST((datepart(yy,[Date])+1 )AS VARCHAR(4)), 2) END as varchar(4)), [FiscalHalfName] AS CAST(CASE WHEN datepart(mm, [Date]) <= 6 THEN 'FY' + RIGHT(CAST((datepart(yy,[Date])) as varchar(4)), 2) + '-'+'H2' ELSE 'FY' + RIGHT(CAST((datepart(yy,[Date])+1 )AS VARCHAR(4)), 2) + '-'+'H1' END as varchar(7)), [FiscalYearID] AS CAST(CASE WHEN datepart(mm, [Date]) <= 6 THEN (datepart(yy,[Date])) ELSE(datepart(yy,[Date])+1 ) END as NUMERIC), [FiscalHalfID] AS CAST(CASE WHEN datepart(mm, [Date]) <= 6 THEN (CAST((datepart(yy,[Date]))AS NUMERIC ) * 100) + 2 ELSE (CAST((datepart(yy,[Date])+1 )AS NUMERIC)*100) + 1 END as NUMERIC), [FiscalMonthID] AS CAST(CASE WHEN datepart(mm, [Date]) <= 6 THEN (CAST((datepart(yy,[Date]))AS NUMERIC ) * 100) + CAST((datepart(mm,[Date]))AS NUMERIC ) ELSE (CAST((datepart(yy,[Date])+1 )AS NUMERIC)*100) + CAST((datepart(mm,[Date]))AS NUMERIC ) END as NUMERIC), [FiscalQuarterID] AS CAST(CASE WHEN datepart(mm, [Date]) <= 6 THEN (CAST((datepart(yy,[Date])) as NUMERIC) * 100) + CAST((datepart(q, [Date])+ 2)as NUMERIC) ELSE (CAST((datepart(yy,[Date])+ 1) as NUMERIC) * 100) + CAST((datepart(q, [Date]) - 2)as NUMERIC) END as NUMERIC), [CalendarMonthName] AS DATENAME(MONTH, [Date]))DECLARE @StartDate datetimeDECLARE @CurrentDay intDECLARE @endDate datetimeset @StartDate = CONVERT(DATETIME, '1996-07-01 00:00:00')set @CurrentDay = 0set @endDate = CONVERT(DATETIME, '2011-06-30 00:00:00')WHILE @StartDate <= @endDate BEGIN insert FiscalCalendar ([Date]) values (dateadd(dd, @CurrentDay, @StartDate)) set @StartDate = (dateadd(dd, 1, @StartDate)) ENDGO |
|
|
Koji Matsumura
Posting Yak Master
141 Posts |
Posted - 2007-10-21 : 23:21:43
|
| Result seem to be wrong but the syntax is as follows:[FiscalQuarterName] AS 'FY'+ RIGHT(CAST((datepart(yy,[Date])+ CASE datepart(q, [Date]) WHEN 0 THEN 0 ELSE 1 END) as varchar(4)), 2)+ '-Q'+ CAST((datepart(q, [Date])-1)as varchar(7)), |
 |
|
|
|
|
|
|
|