如何让月份名称(字符)和年份名称(日期)出现在我的 Cognos 数据项和列中

How do I get the name of the month (char) and the Year (date) to appear in my data item and column in Cognos

我的会计期间日期使用的是数字数据类型

1990-01-01
2008-08-01
2008-07-01

所以我在数据项中应用了CAST函数

结果是这样的。

Jan 1, 1990
Aug 1, 2008
Jul 1, 2008

有没有办法让它看起来像这样?

Jan 1990
Aug 2008
Jul 2008

我试过像这样使用替换函数来使用新数据项,但它不起作用。

这是我得到的错误。

有人能帮帮我吗

也许是这样的?

SELECT CAST(DATENAME(MONTH,GETDATE()) AS VARCHAR(3)) + ' ' + CAST(DATEPART(YEAR,GETDATE()) AS VARCHAR(4)) AS mystring

您将 运行 遇到的部分问题是 Cognos 的日期类型自动格式化。这就是您在 1990 年 1 月 1 日格式中看到的内容。数据仍然作为日期存在,但 Cognos 选择在 运行ning 时重新格式化它。因此,您不能使用子字符串函数来提取您想要的组件,因为它不以字符串形式存在。直接转换为字符串会将其恢复为字符串形式的 'YYYY-MM-DD' 格式,这显然不是您想要的。

共有三个选项。

如果您只想在报告中以所需格式显示日期,那么最简单的解决方案是在报告定义中的列本身上使用 'Data Format' 属性(列表,交叉表、单例等)。在数据格式 属性 sheet 中有一个名为 'Pattern' 的 属性。您可以使用此 属性 来定义列的显示方式。在此 属性 中输入 'MMM YYYY' 以创建您想要的输出。

如果您需要更改实际数据项以匹配您需要的格式,那么您将必须构建一个字符串:

CASE extract(month,[Date]) 
WHEN 1 THEN 'Jan' 
WHEN 2 THEN 'Feb' 
WHEN 3 THEN 'Mar' 
WHEN 4 THEN 'Apr' 
WHEN 5 THEN 'May' 
WHEN 6 THEN 'Jun' 
WHEN 7 THEN 'Jul' 
WHEN 8 THEN 'Aug' 
WHEN 9 THEN 'Sep' 
WHEN 10 THEN 'Oct' 
WHEN 11 THEN 'Nov' 
WHEN 12 THEN 'Dec' 
END || ' ' || cast(extract(year,[Date]),char(4))

您最后的选择是使用数据源供应商特定的转换函数。例如,DB2 的 to_Char() 函数允许您精确定义日期如何转换为字符。其他数据库服务器有自己的功能来做类似的事情。您必须弄清楚您的数据源供应商的解决方案中是否有等效项。

这种方法的缺点是,如果您将数据源更改为另一个供应商,您也必须调整报告,否则它可能会引发错误。当您使用 Cognos 自己的函数时,Cognos 会自动为您将该函数转换为等效的特定于供应商的函数。您可能会以牺牲灵活性和功能为代价获得便携性和维护性。