我想在参考当前日期时使用一个月的偏移量(我使用的是BusinessObjects 4.0信息设计工具)。 例如,有一个值为201505(意味着2015年5月)的列,新列应具有值' 2' (假设当前月份是201503 - 2015年3月)。 另一个示例是,如果第一列的值为' 201410',则新列应具有相应的值' -7'。
我尝试实施“月份抵消”'通过分析当前月份数 - 12'列,定义如下:
cast(
convert(
char(6),
dateadd(m, -12,
left(cast(( Zeitdimension.Year_Month_NUM ) as char(6)), 4)
+ '-'
+ right(cast(( Zeitdimension.Year_Month_NUM ) as char(6)), 2)
+ '-01')
, 112
)
as int
)
(Zeitdimension.Year_Month_NUM的值为201402,201901 ......)
但是我不理解convert和dateadd函数,也无法在互联网上找到任何关于它们的信息。
我的想法是调整“当前月数 - 12”的定义。列取第一列中的值(值为201401,201502)并从当前日期减去这些值(201501,201403 ......等值)。
任何人都可以帮助我:
THX!
答案 0 :(得分:1)
函数convert
和dateadd
是SQL Server函数,而不是BusinessObject函数。您可以在 Transact-SQL参考>部分的Books Online文档中了解有关它们的更多信息。 内置函数。
关于现有表达式:最里面的分解现有列值并将其转换为日期,例如201412
至2014-12-01
。
left(cast(( Zeitdimension.Year_Month_NUM ) as char(6)), 4)
+ '-'
+ right(cast(( Zeitdimension.Year_Month_NUM ) as char(6)), 2)
+ '-01')
dateadd
函数然后减去12个月。
convert
将日期更改为字符串(格式YYYYMMDD
)并删除最后2位数字,从而生成201312
。
最后,cast
将数据类型从字符串更改为整数。
您无法开始使用结果值进行计算(例如从201401
减去201501
),因为这不会考虑您处理的年数和月数) 。后一个示例将返回100
而不是12
。
相反,要计算与当前日期相比的月数偏移量,请尝试以下表达式:
datediff(mm
,dateadd(d, datepart(d, getdate()) * -1, getdate())
,left(cast(( Zeitdimension.Year_Month_NUM ) as char(6)), 4)
+ '-'
+ right(cast(( Zeitdimension.Year_Month_NUM ) as char(6)), 2)
+ '-01')
这将采用当前日期,减去当前天数(因此您总是在该月的第一个日期结束),然后使用datediff
来计算月数差异。
在最新的SQL Server版本中,可用的日期时间功能得到了显着改善,无需执行此类错综复杂的转换。再次,查看联机丛书,了解您正在使用的SQL Server版本中可用的内容。