如何让月份名称(字符)和年份名称(日期)出现在我的 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 会自动为您将该函数转换为等效的特定于供应商的函数。您可能会以牺牲灵活性和功能为代价获得便携性和维护性。
我的会计期间日期使用的是数字数据类型
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 会自动为您将该函数转换为等效的特定于供应商的函数。您可能会以牺牲灵活性和功能为代价获得便携性和维护性。