| Author |
Topic |
|
Tart_SQL
Starting Member
41 Posts |
Posted - 2008-03-17 : 21:52:24
|
| Hello,I have this query that should give me records for some date range. But the problem is it is only giving me just two records instead of all records with the date range. I know the most recent date should be stated last in the where clause but doing so gave me no records like the one below, interchanging it gave me two rows. I dont know what I am doing wrong. Any Help will be appreciated.DECLARE @startQuarter varchar(20)DECLARE @finishQuarter varchar(20)SET @startQuarter = '3Q07'SET @finishQuarter = '1Q08'SELECT year, quarter, CAST(DATEPART(Quarter ,createdDate) as varchar(4)) + 'Q' + RIGHT(YEAR(createdDate), 2) as qt_Yr, startQrtDate as FirstDayOfQuaterFROM ......where startQrtDate between ( case when substring(@startQuarter,1,2) = '1Q' then replace(replace(@startQuarter, substring(@startQuarter,3,2) , '20' + substring(@startQuarter,3,2)), substring(replace(@startQuarter, substring(@startQuarter,3,2) , '20' + substring(@startQuarter,3,2)),1,2) , '01/01/') when substring(@startQuarter,1,2) = '2Q' then replace(replace(@startQuarter, substring(@startQuarter,3,2) , '20' + substring(@startQuarter,3,2)), substring(replace(@startQuarter, substring(@startQuarter,3,2) , '20' + substring(@startQuarter,3,2)),1,2) , '04/01/') when substring(@startQuarter,1,2) = '3Q' then replace(replace(@startQuarter, substring(@startQuarter,3,2) , '20' + substring(@startQuarter,3,2)), substring(replace(@startQuarter, substring(@startQuarter,3,2) , '20' + substring(@startQuarter,3,2)),1,2) , '07/01/') when substring(@startQuarter,1,2) = '4Q' then replace(replace(@startQuarter, substring(@startQuarter,3,2) , '20' + substring(@startQuarter,3,2)), substring(replace(@startQuarter, substring(@startQuarter,3,2) , '20' + substring(@startQuarter,3,2)),1,2) , '09/01/') end ) and ( case when substring(@finishQuarter,1,2) = '1Q' then replace(replace(@finishQuarter, substring(@finishQuarter,3,2) , '20' + substring(@finishQuarter,3,2)), substring(replace(@finishQuarter, substring(@finishQuarter,3,2) , '20' + substring(@finishQuarter,3,2)),1,2) , '03/31/') when substring(@finishQuarter,1,2) = '2Q' then replace(replace(@finishQuarter, substring(@finishQuarter,3,2) , '20' + substring(@finishQuarter,3,2)), substring(replace(@finishQuarter, substring(@finishQuarter,3,2) , '20' + substring(@finishQuarter,3,2)),1,2) , '06/30/') when substring(@finishQuarter,1,2) = '3Q' then replace(replace(@finishQuarter, substring(@finishQuarter,3,2) , '20' + substring(@finishQuarter,3,2)), substring(replace(@finishQuarter, substring(@finishQuarter,3,2) , '20' + substring(@finishQuarter,3,2)),1,2) , '09/30/') when substring(@finishQuarter,1,2) = '4Q' then replace(replace(@finishQuarter, substring(@finishQuarter,3,2) , '20' + substring(@finishQuarter,3,2)), substring(replace(@finishQuarter, substring(@finishQuarter,3,2) , '20' + substring(@finishQuarter,3,2)),1,2) , '12/31/') end ) |
|
|
ayamas
Aged Yak Warrior
552 Posts |
Posted - 2008-03-18 : 02:09:56
|
| I think you need to convert your case condition datatype to datetime.For example take case condition when substring(@startQuarter,1,2)='3Q'.Change the case statement tocast(replace(replace(@startQuarter, substring(@startQuarter,3,2) , '20' + substring(@startQuarter,3,2)), substring(replace(@startQuarter, substring(@startQuarter,3,2) , '20' + substring(@startQuarter,3,2)),1,2) , '07/01/')as datetime). |
 |
|
|
Tart_SQL
Starting Member
41 Posts |
Posted - 2008-03-18 : 02:21:00
|
| thanks for the insight I will try that, also I had some errors in the quarter dates which I need to fix. |
 |
|
|
|
|
|