TSQL Logic в SSRS
Я строю отчет, который имеет поле заголовка как PropertyStatementForHalfyear Ending :<Date>
Так что в DATE
поле мне нужно поставить May 28
или же Nov 28
в зависимости от даты запуска отчета
Что за логика мне нужно написать??
- Например, если я запускаю отчет сегодня, т.е. 22 июня, мне нужно отобразить
PropertyStatementForHalfyear Ending : 28 Nov 2013
- если я запускаю его в декабре 2013 года, мне нужно отобразить
PropertyStatementForHalfyear Ending : 28 May 2014
2 ответа
Вы можете использовать что-то вроде этого:
DECLARE @DateThreshold1 DATE = '20130528'
DECLARE @DateThreshold2 DATE = '20131128'
DECLARE @CurrentDate DATE = '20131201'
IF @CurrentDate > @DateThreshold2
SELECT CONVERT(VARCHAR(50), DATEADD(YEAR, 1, @DateThreshold1), 106)
ELSE IF @CurrentDate > @DateThreshold1
SELECT CONVERT(VARCHAR(50), @DateThreshold2, 106)
ELSE
SELECT CONVERT(VARCHAR(50), @DateThreshold1, 106)
- Для дат от
20130101
через20130528
, это вернется28 May 2013
- Для дат от
20130529
через20131128
, это вернется28 Nov 2013
- За прошедшие даты
20131128
, это вернется28 May 2014
Вы можете легко упаковать это в функцию или фрагмент кода SSRS.
Если вы не в утверждениях IF/CASE, как я:
with dt as
(select CAST('2013-11-28' as datetime) dt) --dt becomes your datetime column.
, ymdt as (select
DATEPART(year, dt) y,
DATEPART(month, dt) m,
DATEPART(day, dt) d,
dt
from dt) --split into year, month and date for readability
select y, m, d, dt,
DATEADD(month, 5 + d/28 - (m + d/28) % 6, --add months depending on month and day
DATEADD(day, 28 - d --go to the correct day
, dt) --start calculation from dt (the sql date functions' parameter order has always baffled me)
) HalfYearEndDate
from ymdt
Механизм SQL объединяет все это в одно большое постоянное сканирование или скалярное выражение в столбце datetime.
Вы должны создать для этого функцию SQL или VB, если вам это нужно в других отчетах, а также, чтобы она не загромождала ваши запросы.
Также: не делайте форматирование текста в T-SQL, если это не является абсолютно необходимым! Верните столбец datetime и сделайте это в самом отчете. Формат, который необходимо установить в текстовом поле: "дд ммм гггг" (без кавычек при использовании дизайнера).