2015-06-05 2 views
-1

Я хочу splite две даты на четыре даты:Split даты на две даты

Date1:04/01/2012 
Date2:12/05/2015 

результат, который я хочу

If datepart(year,date2)=datepart(year,getdate()) 
Case1 
Date1:04/01/2012 
Date2:31/12/2014 
Date3:01/01/2015 
Date4:12/05/2015 
Else 
Case2 
Date1:04/01/2012 
Date2:12/05/2015 

Мой вопрос, как получить date2 и date3 в case1?

ответ

0

Вы можете вид создать их так:

select '01/01/'+(select cast(datepart(yy,getdate()) as varchar)) 
select '31/12/'+(select cast(datepart(yy,getdate())-1 as varchar)) 
+0

Спасибо, но я хочу решение, независимо от формата даты! –

+0

[Значения даты не имеют формата] (http://stackoverflow.com/questions/30032915/how-to-cast-the-datetime-to-time/30033028#30033028) –

0

Если я вас правильно понял вы хотите добавить «поддельную» запись для вашего оператора выбора, если первая дата в году, что перед текущим год, а второй - в текущем году.
Я взял на себя смелость предположить, что вы не хотите добавлять 31/12 /, если первая дата на самом деле 31 декабря прошлого года.

Вот мое предложение:

;With cte as (
SELECT DateValue, ROW_NUMBER() OVER (ORDER BY DateValue) As rn 
FROM Tbl 
) 

-- Get the first date 
SELECT DateValue 
FROM cte 
WHERE rn = 1 

UNION ALL 

/* 
    Add the last date of the previous year. 
    The where clause will enable you to add this to the select result only on your terms 
    (if the second date is on the current year and the first date is before Dec 31th of the last year) 
*/ 
SELECT CAST(CAST(YEAR(GETDATE())-1 as varchar) + '-12-31' as date) 
FROM cte 
WHERE rn = 2 
AND YEAR(DateValue) = YEAR(GETDATE()) 
AND CAST(CAST(YEAR(GETDATE())-1 as varchar) + '-12-31' as date) > (SELECT DateValue FROM cte WHERE rn = 1) 

UNION ALL 

/* 
    Add the first date of the current year. 
    Note that the where clause here is only testing that the second date is on the current year, 
    while the first date is before the current year. 
    So it will add the Jan 1st of the current year even if the first date is Dec 31th of the last year. 
*/ 
SELECT CAST(CAST(YEAR(GETDATE()) as varchar) + '-01-01' as date) 
FROM cte 
WHERE rn = 2 
AND YEAR(DateValue) = YEAR(GETDATE()) 
AND YEAR(GETDATE()) > (SELECT YEAR(DateValue) FROM cte WHERE rn = 1) 

UNION ALL 

-- add the second date 
SELECT DateValue 
FROM cte WHERE rn = 2 

You can see it working on this fiddle.