Konvertieren Sie die Excel-Seriennummer in ein reguläres Datum
Habe ich eine Spalte namens " DateOfBirth in meiner csv-Datei mit Excel-Datum-Seriennummer-Datum
Beispiel:
36464
37104
35412
Wenn ich die formatierte Zellen in excel diese konvertiert, als
36464 => 1/11/1999
37104 => 1/08/2001
35412 => 13/12/1996
Brauche ich, um diese transformation in SSIS oder SQL. Wie kann das erreicht werden?
InformationsquelleAutor der Frage Sreedhar | 2012-12-12
Du musst angemeldet sein, um einen Kommentar abzugeben.
In SQL:
In SSIS finden Sie hier
http://msdn.microsoft.com/en-us/library/ms141719.aspx
InformationsquelleAutor der Antwort Nick.McDermaid
Die markierte Antwort ist nicht fein arbeiten, bitte ändern Sie das Datum "1899-12-30" statt "1899-12-31".
InformationsquelleAutor der Antwort Jacob Santiago
Können Sie werfen es auf einen SQL smalldatetime:
SQL Server zählt seine Termine aus 01/01/1900 und Excel aus 12/30/1899 zurück = 2 Tage weniger.
InformationsquelleAutor der Antwort rcdmk
dieser tatsächlich für mich gearbeitet
(minus 1 Tag im Datum)
verweisen auf die negativen kommentierte post
InformationsquelleAutor der Antwort drinky
SSIS-Lösung
"Den DT_DATE-Datentyp implementiert ist, mit einem 8-byte-Gleitkommazahl. Die Tage sind repräsentiert durch die ganze Zahl Schritten, beginnend mit 30. Dezember 1899, und Mitternacht, als die Zeit null. Stunde Werte sind ausgedrückt als der absolute Wert der gebrochene Teil der Zahl. Jedoch, eine floating-point-Wert kann nicht repräsentieren alle real-Werte; daher gibt es Grenzen für den Bereich der Daten, die dargestellt werden können, in DT_DATE." Lesen Sie mehr
Aus der obigen Beschreibung kann man sehen, dass können Sie konvertieren Sie diese Werte implizit beim zuordnen zu einer
DT_DATE
Spalte nach der Konvertierung in ein 8-byte-GleitkommazahlDT_R8
.Verwenden Sie eine transformation für abgeleitete Spalten konvertieren diese Spalte 8-byte-floating-point-Zahl:
Ordnen Sie es ein
DT_DATE
SpalteGegossen oder es zweimal:
Können Sie überprüfen, meine ausführliche Antwort hier:
InformationsquelleAutor der Antwort Hadi
Fand dieses Thema hilfreich, so viel, so erstellt eine schnelle SQL-UDF.
InformationsquelleAutor der Antwort Lankymart
Zusätzlich von @Nick.McDermaid beantworten, ich möchte nach dieser Lösung, welche die Umwandlung von nicht nur die Tage sondern auch die Stunden, Minuten und Sekunden:
Beispielsweise
42948.123
zu2017-08-01 02:57:07.000
42818.7166666667
zu2017-03-24 17:12:00.000
InformationsquelleAutor der Antwort Nicolaesse
Können Sie dies tun, wenn Sie gerade brauchen, um das Datum im Blick:
CAST
wird schneller sein alsCONVERT
wenn Sie eine große Menge von Daten, denken Sie auch daran, um zu subtrahieren (2) aus der excel-Datum:Wenn Sie müssen, aktualisieren Sie die Spalte, um zu zeigen, ein Datum können Sie entweder update über einen join (self-Joins wenn nötig) oder einfach versuchen Sie Folgendes:
Können Sie nicht brauchen, um Darsteller die excel-Datum als INT, aber da der Tisch, an dem ich arbeitete, war eine varchar-ich hatte zu tun, dass die manipulation zuerst. Ich wollte auch nicht die "Zeit" - element, so musste ich entfernen, das element mit der endgültigen Besetzung als "Datum".
Wenn Sie unsicher sind, was Sie tun wollen, mit diesem test und re-test! Machen Sie eine Kopie Ihrer Tabelle, wenn Sie brauchen. Sie können immer einen Blick!
InformationsquelleAutor der Antwort Turkish
Musste ich dies auf die nächste Stufe, weil meine Excel-Daten hatten die auch mal, also ich hatte Werte wie diese:
(auch, erschweren es ein wenig mehr, meine numerischer Wert mit Dezimalstellen gespeichert wurde, als NVARCHAR)
SQL, die ich verwendet, um diese Umwandlung ist:
InformationsquelleAutor der Antwort hurleystylee
Versuchen den Ansatz diskutiert in dem folgenden link, die umfasst das erstellen einer Funktion führt die Konvertierung und Anwendung der Funktion in der SQL.
http://www.ehow.com/how_12073756_convert-julian-date-sql.html
InformationsquelleAutor der Antwort
Dieser arbeitete für mich, weil manchmal war das Feld eine numerische, um die Zeit Teil.
Befehl:
InformationsquelleAutor der Antwort user2788991