在SSRS中使用以下示例查询会将月份作为单个数字(1-12)返回。我想要的是显示日期,就像2000年1月那样。我如何改变我的代码,以便能够从单个月号格式化为MMM YYYY格式?我在visual studio中尝试了格式化,但它目前正在以MMM YYYY的形式返回。
select distinct count(*) as Count,
con.STATE,
month(con.sub_Date) as Month,
year(con.sub_Date) as Year
from contract con
group by con.STATE,month(con.sub_date),year(con.sub_date)
答案 0 :(得分:2)
您可以将以下内容添加到查询中,以将预先格式化的月份/年份作为报告数据集的一部分返回 - 可能比尝试在报告级别重建它更容易:
select distinct count(*) as Count,
con.STATE,
month(con.sub_Date) as Month,
year(con.sub_Date) as Year,
left(datename(mm, sub_Date), 3) + ' ' + cast(year(sub_Date) as char(4)) as MonthYear
from contract con
group by con.STATE,
month(con.sub_date),
year(con.sub_date),
left(datename(mm, sub_Date), 3) + ' ' + cast(year(sub_Date) as char(4))
答案 1 :(得分:2)
我通常更喜欢使用CONVERT来获取部分日期,但我没有看到任何CONVERT日期格式会让你干净利落地使用MON YYYY输出。但是,格式106将为您提供大部分方式。因此,将它与RIGHT()结合起来可以获得您正在寻找的格式的日期。
SELECT DISTINCT
COUNT(*) AS Count ,
[con].[STATE] ,
MONTH([con].[sub_Date]) AS Month ,
YEAR([con].[sub_Date]) AS Year ,
RIGHT(CONVERT(CHAR(11), [con].[sub_Date], 106), 8) AS MonthYear
FROM [dbo].[contract] AS con
GROUP BY [con].[STATE] ,
MONTH([con].[sub_Date]) ,
YEAR([con].[sub_Date]) ,
RIGHT(CONVERT(CHAR(11), [con].[sub_Date], 106), 8)
答案 2 :(得分:2)
我强烈建议您在报告级别执行日期格式设置。
将查询中的日期作为所需期间的第一个日期返回,但随后设置占位符/文本框的格式字符串。
这样做的原因是,当报表导出到Excel时,排序和数据操作按预期工作。
所以我会使用一个查询:
SELECT DISTINCT
COUNT(*) AS Count ,
con.STATE ,
DATEADD(MONTH, DATEDIFF(MONTH, 0, con.sub_Date), 0) AS FirstOfMonth
FROM
contract con
GROUP BY
con.STATE ,
DATEADD(MONTH, DATEDIFF(MONTH, 0, con.sub_Date), 0)
然后使用报告中的格式代码(例如MMM, YYYY
)进行显示,如果需要分组,则使用=Month(fields!FirstOfMonth.Value)
分隔日期。这将允许用户在需要时适当地转动数据。
日期的格式是表示逻辑,如果可能的话,应该保留在SQL之外。