Ausführen von Abfragen mit Datumzeit in WHERE-Klausel
-
28-09-2019 - |
Frage
Ich benutze SQL Server 2008 R2 als Datenspeicher.
Bisher auf der Testmaschine hatte ich die Englisch-Version der Software und Abfragen verwendet, um die Formatierung des Datetime-Feld als
fromDate.ToString("MM/dd/yyyy");
Jetzt habe ich die Datenbank auf einem anderen Server bereitgestellt, die in der italienischen Sprache. Ich werde das Format in meinem Code ändern
fromDate.ToString("dd/MM/yyyy");
Gibt es eine Möglichkeit, die Abfrage in einem neutralen Format zu machen?
Danke!
Bearbeiten :
ich habe vergessen zu erwähnen, dass ich NetTiers mit Codesmith verwende. Hier ist eine komplette Probe
AppointmentQuery aq = new AppointmentQuery(true, true);
aq.AppendGreaterThan(AppointmentColumn.AppointmentDate, fromDate.ToString("MM/dd/yyyy"));
aq.AppendLessThan(AppointmentColumn.AppointmentDate, toDate.ToString("MM/dd/yyyy"));
AppointmentService aSvc = new AppointmentService();
TList<Appointment> appointmentsList = aSvc.Find(aq);
Lösung
ISO 8601 Datenelemente und Austauschformate - Informationsaustausch - Darstellung von Daten und Zeiten erlaubt sowohl die YYYY-MM-DD und YYYYMMDD. SQL Server erkennt die ISO-Spezifikationen.
Obwohl der Standard sowohl ermöglicht es die YYYY-MM-DD und YYYYMMDD Formate für vollständiges Kalenderdatum Darstellungen, wenn der Tag [DD] ist dann nur das YYYY-MM-Format weggelassen ist erlaubt. Durch disallowing Daten ein die Form YYYYMM, die Standard-Vermeidet Verwechslungen mit dem trunkierten Darstellung YYMMDD (noch häufig verwendet wird).
Ich ziehe das Format JJJJMMTT, aber ich denke, das ist, weil ich nur wusste, dass mit zu beginnen, und mir scheint es, universellere, weg mit Zeichen getan zu haben, die länderspezifisches angesehen werden könnten.
Andere Tipps
Sie sollten den Code teilen Sie die Abfrage auszuführen verwenden, aber ich denke, Sie bauen eine SQL-Abfrage dynamisch Zeichenfolge concats mit der Abfrage und die Argumente zu bauen. Sie sollten vielmehr eine parametrisierte Abfrage verwenden, dann können Sie die Daten als Datumsobjekt und keine Notwendigkeit, Converto eine Zeichenfolge übergeben.
Zum Beispiel, wenn Ihre Abfrage so etwas wie dies könnte
DateTime fromDate = DateTime.Now;
SqlCommand cmd = new SqlCommand(
"select * from Orders where fromDT = @fromDate", con);
cmd.Parameters.AddWithValue("@fromDate", fromDate);
...
Als guter Nebeneffekt, wird dies das Risiko von SQL-Injection .
Update: Nach dem bearbeiten, die die Frage Kontext wesentlich ändert, und ich muss zugeben, dass ich Null Kenntnis des .netTiers Projekt. Aber nur aus Neugier haben Sie versucht, nur das Datum vorbei Instanzen direkt wie im Folgenden?
AppointmentQuery aq = new AppointmentQuery(true, true);
aq.AppendGreaterThan(AppointmentColumn.AppointmentDate, fromDate);
aq.AppendLessThan(AppointmentColumn.AppointmentDate, toDate);
AppointmentService aSvc = new AppointmentService();
TList<Appointment> appointmentsList = aSvc.Find(aq);
Ich persönlich verwenden yyyy-MM-dd
immer. Dies macht es auch als String sortierbar.
Allerdings ist ein Datum, ein Datum ist ein Datum. Es gibt keine Notwendigkeit, das Datum in eine Zeichenfolge zu ändern. In .NET Benutzer DateTime
.