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 и сделайте это в самом отчете. Формат, который необходимо установить в текстовом поле: "дд ммм гггг" (без кавычек при использовании дизайнера).

Другие вопросы по тегам