2016-11-29 1 views
0

Ich habe eine bestimmte Situation, die ich nicht ganz herausfinden kann.SQL Server Datum Konvertierung von einem bestimmten Format in ein anderes genaues Datumsformat

Ich habe ein Feld in einer SQL-Tabelle, die als DATETIME- in folgendem Format gespeichert:

2016-11-26 00:00:00 

Das ist alles gut und-gut, außer dass ich es in dd/MM/yyyy Format benötigen.

Ich möchte nicht die CONVERT(VARCHAR(10), @dateField, 103)-Funktion in SQL verwenden, weil ich ein DATE-Format, nicht ein STRING-Format möchte.

Ich exportiere ein Ergebnis DataTable nach Excel mit der EPPlus-Bibliothek und ich brauche die Datumsfelder im Export in genau diesem Format.

Ich habe versucht:

  • FORMAT(@dateField, 'dd/MM/yyyy', 'en-gb') sowie diese wieder in einen Typ DATE Gießen. Es konvertiert noch implizit zu VARCHAR oder NVARCHAR
  • Casting @ dateField zu DATE und SMALLDATETIME
  • Verwenden von C# zu versuchen, dieses Datum in dem richtigen Format zu konvertieren. DateTime.ParseExact(dataTable.Rows[i]["DateField"].ToString(), "dd/MM/yyyy", CultureInfo.InvariantCulture);
  • EPPlus Spaltenformatierung: workSheet.Column(19).Style.Numberformat.Format = "dd/MM/yyyy";

Ich bin auf dieser Umwandlung von Optionen ausgeführt wird, weil keiner meiner Versuche für ein Datums- und Uhrzeitformat arbeiten. Jeder Pfad, den ich genommen habe, konvertiert meinen Wert (s) zurück in eine Zeichenkette. Jede Hilfe wäre willkommen :)

+0

Warum rufen Sie 'DateTime.ParseExact' auf? Der Wert sollte bereits eine 'DateTime' sein, also wirf ihn einfach auf diese und * dann * rufe' ToString' auf. Und wenn Sie ein bestimmtes Format haben wollen, * * fragen Sie nach einem String, nicht nach einem DateTime-Wert. –

+1

DateTime hat das Format ** NO **. Es ist ein Binärwert, genau wie .NET DateTime oder Bool oder Dezimal. Sie müssen nichts konvertieren. Verwenden Sie einfach eine parametrisierte Abfrage oder ORM und übergeben Sie die DateTime-Werte als DateTime-Parameter. EPPlus benötigt auch keine speziellen Formate - Daten in Excel verwenden das OADate-Binärformat und EPPlus konvertiert DateTime direkt in dieses Format. Wie Excel ein Datum anzeigt, hängt vom spezifischen Spaltenstil ab, der * verwirrend sein kann * –

+0

@JonSkeet Ich habe versucht, eine regelmäßige Parse sowie eine direkte Besetzung. Die Parse hat das Format nicht geändert, und die direkte Besetzung hat eine InvalidCastException ausgelöst. Wenn Sie den Typ in SQL ändern, wird der Wert in der Kalkulationstabelle auch ohne die Konvertierung als Zahl gespeichert. Ich erwarte 22.03.2011, aber der Zellenwert ist 40624 :( – GrammatonCleric

Antwort

0

Wenn es eine Datetime-Spalte ist, wird es als binäre Darstellung des Datums gespeichert; Nur wenn es in einer Client-Anwendung wie Management Studio gerendert wird, wird es in einem bestimmten Format gerendert.

Wenn Sie es also in einem bestimmten Format benötigen, meinen Sie das als String in diesem Format. Sie können immer zurück in eine Datetime konvertieren (und sollten!), Wenn Sie zurück in die Datenbank speichern. Sie möchten zum Beispiel den Zeitanteil vor dem Speichern von einer Datetime abschneiden.

+0

Schöne Schlussfolgerung, aber es ist ein 3rd-Party-System und ich bin nicht berechtigt, den Code so zu ändern, dass ich Daten in der Datenbank in einer bestimmten Art und Weise veröffentlichen kann – GrammatonCleric

+0

Sorry, wenn ich, Missverständnis, aber Sql Der Server speichert die Daten in datetime als Zahl, die das Datum darstellt, das Format ist nur dann wichtig, wenn die Daten untersucht/angezeigt werden, und natürlich beim Einfügen/Aktualisieren. Es ist immer am besten, ein Format zu verwenden, das für Sql Server eindeutig ist (sagen wir am 29. November 2016), aber wenn Ihr Drittanbietersystem mit dem Format arbeitet, das Sie ihm geben, sollten Sie in Ordnung sein? –

+0

@GrammatonCleric höchstwahrscheinlich verwechseln Sie Excel Art der Anzeige von Daten für ein SQL-Formatierungsproblem. Da ist gar nichts. Daten in Excel werden * immer * als Dezimalzahlen (Datumsoffset + Zeitanteil) gespeichert. Dies wird je nach gewähltem Zahlenformat unterschiedlich angezeigt. Einige von ihnen werden als "lokale" Formate betrachtet, was zu unterschiedlichen Formaten für verschiedene Ländereinstellungen führt –

Verwandte Themen