2013-03-12 48 views
0

在SSRS中使用下面的示例查詢會將月份返回爲單個數字(1-12)。我想要的是像2000年1月那樣顯示日期。我將如何更改我的代碼以便能夠從單個月份格式化爲MMM YYYY格式?我試圖在Visual Studio本身的格式,但它現在返回作爲MMM YYYY。SSRS/TSQL日期格式

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) 

回答

1

我強烈建議您在報告級別執行日期的格式設置。

從查詢中返回日期作爲期望時間段的第一個日期,然後設置佔位符/文本框的格式字符串。

這樣做的原因是,當報告導出到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外面。

1

您可以添加以下到查詢到預格式化月/年回國作報告數據集的一部分 - 也許更容易比試圖在報告級別來重建它:

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)) 
+0

看起來好像可以工作,我會看到它後,我會看到更多。非常感謝! – user2146212 2013-03-12 14:48:27

1

我通常更喜歡使用CONVERT獲取部分日期,但我沒有看到任何CONVERT日期格式,這會使MONYYYY輸出變得乾淨利落。然而,格式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)