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.

 All Forums
 General SQL Server Forums
 New to SQL Server Administration
 about if else

Author  Topic 

nani2indra
Starting Member

1 Post

Posted - 2009-12-03 : 22:20:53
DECLARE @startDate DATETIME,
@endDate DATETIME;
SET @startDate='2009.04.15';
SET @endDate='2009.04.30';
DECLARE @wholepart FLOAT;
DECLARE @fraction FLOAT;
IF(MONTH(@startdate)=MONTH(@enddate))
BEGIN
IF (MONTH(@endDate)IN(1,3,5,7,8,10,12))
BEGIN
SELECT @wholepart =DATEDIFF(MONTH,@startDate,@endDate) *1.0,
@fraction =DATEDIFF(DAY,@startDate,DATEADD(DAY,1,@endDate)) *1.0/31.0
SELECT ROUND(@wholepart+@fraction,0)
END
IF (MONTH(@endDate)IN(4,6,9,11)) AND (DAY(@startdate)>15)
BEGIN
SELECT @wholepart =DATEDIFF(MONTH,@startDate,@endDate) *1.0,
@fraction =DATEDIFF(DAY,@startDate,DATEADD(DAY,1,@endDate)) *1.0/30.0
SELECT ROUND(@wholepart+@fraction,0)

END
IF(MONTH(@startdate)=2) AND (DAY(@startdate)>14)
IF(YEAR(@startdate)%4=0)
SELECT @wholepart =DATEDIFF(MONTH,@startDate,@endDate) *1.0,
@fraction = DATEDIFF(DAY,DATEADD(MONTH,@wholepart,@startDate),DATEADD(DAY,1,@endDate)) *1.0/29.0
ELSE
SELECT @wholepart =DATEDIFF(MONTH,@startDate,@endDate) *1.0,
@fraction = DATEDIFF(DAY,DATEADD(MONTH,@wholepart,@startDate),DATEADD(DAY,1,@endDate)) *1.0/28.0
SELECT ROUND(@wholepart+@fraction,0)
END
ELSE
SELECT @wholepart =DATEDIFF(MONTH,@startDate,@endDate) *1.0,
@fraction =DATEDIFF(DAY,DATEADD(MONTH,@wholepart,@startDate),@endDate) *1.0/
CASE WHEN MONTH(@endDate) IN (1,3,5,7,8,10,12) THEN 31.0
WHEN MONTH(@endDate) IN (4,6,9,11) THEN 30.0
WHEN MONTH(@endDate)=2 AND (YEAR(@endDate)%4 = 0) THEN 29.0
ELSE 28.0 END

SELECT @wholepart+@fraction
SELECT round(@wholepart+@fraction,0)

I am getting null value can you fix it

madhivanan
Premature Yak Congratulator

22864 Posts

Posted - 2009-12-04 : 02:57:37
What are you trying to do?

Madhivanan

Failing to plan is Planning to fail
Go to Top of Page

rajdaksha
Aged Yak Warrior

595 Posts

Posted - 2009-12-04 : 03:42:13
Hi

Try this...


DECLARE @startDate DATETIME,
@endDate DATETIME;

SET @startDate = '2009.04.15';
SET @endDate = '2009.04.30';

DECLARE @wholepart FLOAT;
DECLARE @fraction FLOAT;


IF(MONTH(@startdate)=MONTH(@enddate))
BEGIN
IF (MONTH(@endDate)IN(1,3,5,7,8,10,12))
BEGIN
SELECT @wholepart =DATEDIFF(MONTH,@startDate,@endDate) *1.0,
@fraction =DATEDIFF(DAY,@startDate,DATEADD(DAY,1,@endDate)) *1.0/31.0
SELECT ROUND(@wholepart+@fraction,0)
END
IF (MONTH(@endDate)IN(4,6,9,11)) AND (DAY(@startdate)>15)
BEGIN
SELECT @wholepart =DATEDIFF(MONTH,@startDate,@endDate) *1.0,
@fraction =DATEDIFF(DAY,@startDate,DATEADD(DAY,1,@endDate)) *1.0/30.0
SELECT ROUND(@wholepart+@fraction,0)
END
IF(MONTH(@startdate)=2) AND (DAY(@startdate)>14)
BEGIN
IF(YEAR(@startdate)%4=0)
BEGIN
SELECT @wholepart =DATEDIFF(MONTH,@startDate,@endDate) *1.0,
@fraction = DATEDIFF(DAY,DATEADD(MONTH,@wholepart,@startDate),DATEADD(DAY,1,@endDate)) *1.0/29.0
END
ELSE
BEGIN
SELECT @wholepart =DATEDIFF(MONTH,@startDate,@endDate) *1.0,
@fraction = DATEDIFF(DAY,DATEADD(MONTH,@wholepart,@startDate),DATEADD(DAY,1,@endDate)) *1.0/28.0
SELECT ROUND(@wholepart+@fraction,0)
END
END
ELSE
BEGIN
SELECT @wholepart =DATEDIFF(MONTH,@startDate,@endDate) *1.0,
@fraction =DATEDIFF(DAY,DATEADD(MONTH,@wholepart,@startDate),@endDate) *1.0/
CASE
WHEN MONTH(@endDate) IN (1,3,5,7,8,10,12) THEN 31.0
WHEN MONTH(@endDate) IN (4,6,9,11) THEN 30.0
WHEN MONTH(@endDate)=2 AND (YEAR(@endDate)%4 = 0) THEN 29.0
ELSE 28.0
END
END
END
--ELSE Block Missing
SELECT @wholepart+@fraction
SELECT round(@wholepart+@fraction,0)




-------------------------
R...
Go to Top of Page

madhivanan
Premature Yak Congratulator

22864 Posts

Posted - 2009-12-04 : 04:01:36
rajdaksha, the result is NULL when the months are different

Madhivanan

Failing to plan is Planning to fail
Go to Top of Page

rajdaksha
Aged Yak Warrior

595 Posts

Posted - 2009-12-04 : 04:10:17
Hi

There no else block

IF (MONTH(@startdate) <> MONTH(@enddate))


-------------------------
R...
Go to Top of Page
   

- Advertisement -