我正在构建一个报告,其标题字段为PropertyStatementForHalfyear Ending :<Date>
因此,在DATE
字段中,我需要根据报告运行的日期放置May 28
或Nov 28
什么是我需要编写的逻辑?
PropertyStatementForHalfyear Ending : 28 Nov 2013
PropertyStatementForHalfyear Ending : 28 May 2014
答案 0 :(得分:1)
您可以使用以下内容:
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代码段
答案 1 :(得分:1)
如果你没有像我这样的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引擎将所有这些合并到日期时间列上的一个大胖常量扫描或标量表达式中。
如果您需要在其他报告中使用此功能,则应为此创建SQL或VB函数,这样也不会使查询混乱。
另外:除非绝对必要,否则不要在T-SQL中进行文本格式化!返回datetime列并在报表本身中执行此操作。您需要在文本框上设置的格式是“dd MMM yyyy”(使用设计器时没有引号)。