1

Ich möchte eines meiner Datenfelder im Datumsformat von MMM YYYY formatieren. Wenn beispielsweise "201209" zurückgegeben wird, möchte ich, dass es als September 2012 angezeigt wird. Auf der SQL-Seite verwende ich eine CAST, um nur das Jahr und den Monat zu betrachten. Normalerweise würde dieses Feld wie "20120914" aussehen. . Hier ist, was ich in dem Verfahren verwendet:Formatieren von JJJJMM zu MMMJJJJ in SSRS

cast(left(cast(TransactionDateKey as varchar(100)), 6) as int) 

Innerhalb SSRS, verwende ich den folgenden Code:

=Format(DateValue(MonthName(Right(Fields!Month.Value, 2)) 
+ "," + 
Left(Fields!Month.Value,4)), "Y") 

aber der Ausgang ist „September 2012“, wie würde ich mich über die Abkürzung bekommen " Sep ", anstelle des vollständigen Monatsnamens?

+0

Wenn möglich sollten Sie Ihre Datenbank so ändern, dass es ein Datetime-Datentyp anstelle von einem int oder Varchar ist, was es klingt wie Sie haben. Dies ist nicht immer möglich. Sie sollten also einen Datums- (oder Datums-) Datentyp an Ihren Bericht übergeben. Führen Sie dann die Formatierung basierend auf dem Datumsdatentyp durch. –

Antwort

1

Eine weitere Option ist Format() in SQL Server

Select Format(CONVERT (date,convert(char(8),TransactionDateKey)),'MMM yyyy') 

Zum Beispiel

Select Format(CONVERT (date,convert(char(8),20120914)),'MMM yyyy') 
-- Returns Sep 2012 

ich das Format beachten sollte() ist für seine Leistung nicht bekannt, aber einige nette Features anbietet

+0

Danke, dass du mit mir zurück kommst, aber wenn ich meine Casting-Aussage loslasse und sie durch deinen Vorschlag ersetze, wird MMM yyyy anstelle eines Wertes – Istaley

+0

@Istaley Zwei Fragen zurückgegeben. 1) ist TransactionDateKey ein Datums- oder Datetime-Feld? 2) Führen Sie das Format() in SQL Server (nicht SSRS) –

+0

1) TransactionDateKey in unserer Faktentabelle ist ein Int. Ich habe es oben gegossen, um den Tag abzuschneiden, nur um YYYYMM zu verlassen. Ich mache einen Matrixbericht und wir möchten wissen, wie viele Füllungen eine Person für jeden Monat hat, nicht jeden Tag. Vielleicht gibt es einen besseren Weg als eine Besetzung, aber ich bin mir nicht sicher.2) Ja, ich habe versucht Format() ist SQL Server – Istaley

0

In SSRS können Sie:

=StrConv(LEFT(
MONTHNAME(REPLACE(RIGHT(Fields!Month.Value,2),"0","")),3 
),vbProperCase,NOTHING) & " " & LEFT(Fields!Month.Value,4) 

Die gibt Sep 2012 für 201209 zurück.

Lassen Sie mich wissen, ob dies hilft.

1

Wenn Sie ein tatsächliches datetime Feld im Dataset zurückgeben - das ist, was Ihre TransactionDateKey zu sein scheint - können Sie die Formatierung vollständig in einem SSRS Ausdruck behandeln format mit:

=format(Fields!TransactionDateKey.Value,"MMM yyyy") 

Wenn Sie zurückkehren, Ihre yyyyMM für die Gruppierung Zwecke, gibt es nichts hindert Sie auf einem datetime Wert des ersten des Monats für TransactionDateKey in Ihrer SQL-Gruppierung:

select dateadd(m,datediff(m,0,TransactionDateKey),0) as FirstDayOfTheMonth 

Wenn Sie unbedingt brauchen Rückkehr ein varchar im Format yyyyMM, können Sie es zu MMM yyyy konvertieren, obwohl Sie es zuerst zu einem date in Ihrem Ausdruck konvertieren müssen - Schrägstriche und alle - vor SSRS Ball spielen:

=format(cdate(left(Fields!Month.Value,4) & "/" & right(Fields!Month.Value,2) & "/01"), "MMM yyyy")