Wie man Kalender-Quartal aus einem Datum in TSQL
Habe ich verschiedene Daten in einer Spalte. Zum Beispiel:
20080102
20070821
Ich konvertieren möchten diese Termine im Jahr und Quartal. E. g.,
Year Quarter
2008 2008-Q1
2007 2007-Q3
Bekomme ich die erste Spalte mit:
select left(date,4) as year from table
Wie kann ich produzieren die zweite Spalte?
- Was ist der Datentyp von der Spalte?
- Datentyp für die Spalte Datum ist vom Datentyp int
- Da Sie die Speicherung der Daten falsch, das erste, was Sie tun müssen, ist zu prüfen, für ungültige Datumsangaben und zu lösen. Es ist eine sehr schlechte Idee zum speichern von Datumsangaben als ganze zahlen.
- meine Herren - unsere data-warehouse basiert auf DateKeys als ganze zahlen. Nie wirklich hinterfragt haben, um verdeckte Sie auf char(8) alle Zeit! SQLFiddle
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dieser gibt das Quartal des
@date
, vorausgesetzt@date
ist einDATETIME
.INT
, nichtDATETIME
. Dies wird nicht für Sie arbeiten.Hier ist, wie ich es mache. Ziemlich kurz und verlässt sich nicht auf temporären Tabellen.
Als Beispiel:
Zurückkehren:
Offensichtlich den string selbst kann geändert werden, entsprechend Ihren eigenen format. Hoffe, das ist hilfreich.
Hier ist eine weitere option. Verwenden Sie einen Allgemeinen Tabellenausdruck definieren die Monate des Quartals und dann fügen Sie es, um zu bestimmen, die Viertel:
Gibt:
SQL Fiddle
Griff Spalte Typ int (04/23/2014):
Seit Ihrem date-Feld Daten in
int
müssen Sie Sie konvertieren, um ein datetime:oder
Dann, wenn Sie wollen, dass die
Q1
Hinzugefügt:Mein Rat wäre, zu speichern
date
Daten alsdatetime
so brauchen Sie sich nicht um diese Konvertierungen.schöne Ausrede, um zu verdecken, um mit KONVERTIEREN. Wahrscheinlich schönere Möglichkeiten, es zu tun:
live-test auf SQLfiddle hier
Siehe eine Live-Demo auf SQL Fiddle
int
Spalte. Es kann nicht akzeptieren, string-input. Du bist auf dem Holzweg.Vorausgesetzt, Feld-Datentyp " INT " und " Feld-name "mydate".
In der OP-Frage, die INT Datum-Werte, wenn in eine Zeichenfolge konvertiert werden, ISO-konforme Datums-Literale.
Sie können datetime -, wenn mit älteren server-version.
Zu bekommen, die genau die Ausgabe, die Sie angefordert werden, können Sie verwenden Sie die unten:
Dadurch erhalten Sie eine Ausgaben wie:
"2015 - Q1", "2013 - Q3", etc.
Habe ich es so (ich bin mit SQL-Server):
Versuchen, diese
Ersetzen
sysdate
mit Ihrem eigenen Spalte name mit Datum, Typ, format unddual
mit Ihrem TabellennamenHaben Sie zum konvertieren von integer in char(8), dann ein datetime.
dann wickeln, dass in
SELECT DATEPART(QUARTAL, [Datum])
Dann musst du konvertieren die oben genannten Charakter-und add-on - ' - ' + Jahr (auch umgewandelt in char)
Dem arithmetischen überlauf oben ist verursacht durch weglassen der ersten konvertieren, um ein Zeichen.
Ich würde geneigt sein, zu Abstrakt die Umstellung auf die Datum-Zeit-Ansichten verwenden, wo möglich, und verwenden Sie dann die Viertel-Funktion und Charakter-Konvertierung, wie und Wann erforderlich.
Hier sehen Sie eine der alternativen :