MSSQL DATE_FORMAT Query-String?

Deletemaster

Erfahrenes Mitglied
Hallo zusammen wieder einmal,
nachdem das Problem mit der Ausgabe des Datums über MySql geklärt wurde, habe ich nun das Problem mit MSSQL

die folgende Funktion gab die gewünschte Ausgabe mit MySql:

Code:
OdbcCommand cmd_GeburtsTag = new OdbcCommand();
cmd_GeburtsTag.Connection = conn;
cmd_GeburtsTag.Parameters.Add("@VRN", str_VRN);
cmd_GeburtsTag.CommandText	= "SELECT DATE_FORMAT(geburtsdatum, '%d') FROM <tabelle> WHERE vrn = ?";
txt_GeburtsTag.Text	= cmd_GeburtsTag.ExecuteScalar().ToString();

Nun habe ich erfolglos an MSSQL anpassen wollen:

Code:
SqlCommand cmd_GeburtsTag = new SqlCommand();
cmd_GeburtsTag.Connection = conn;
cmd_GeburtsTag.Parameters.Add("@vrn", str_VRN);
cmd_GeburtsTag.CommandText = "SELECT DATE_FORMAT(geburtsdatum, '%d') FROM <tabelle> WHERE vrn = @vrn";

meine TextBox aber bleibt leer?
Habe schon gegoogelt aber keine Lösung gefunden.

PS: in der MySql stand das Datum in folgendem Format: 2007-02-17
in der MSSQL steht das Datum im Format: 17.02.2007
 

Nico Graichen

Erfahrenes Mitglied
Hi,

Punkt eins, warum die TextBox leer bleibt, wäre: Du führst den Command nicht aus, aber ich nehme mal an, dass hast du nur in deinem Post hier vergessen. ;)

Das zweite ist die Funktion DATE_FORMAT. Die gibt es beim SQL Server nicht. Was willst du denn mit der Methode bezwecken?
 

Deletemaster

Erfahrenes Mitglied
txt_GeburtsTag.Text = cmd_GeburtsTag.ExecuteScalar().ToString();
steht natürlich noch drunter :)

Ursprünglich hatte ich wegen des MySql Formates 3 TextBoxen angelegt und getrennt das Datum angezeigt um beim Update Fehler bei der Formatierung zu vermeiden.
Bei MySql zwingend : 2007-02-17
somit kann ich Falscheingaben durch User abfangen, indem ich das Datum einfach trenne und bei einer evtl. Änderunf den String wieder zusammensetze
TAG MONAT JAHR
(Das Geburtsdatum einer Person wird sich nie ändern :) , aber bei anderen Angaben ist das schon möglich!
Welche Möglichkeit habe ich denn bei SQL-Server?
Danke
 
Zuletzt bearbeitet:

Norbert Eder

Erfahrenes Mitglied
Mensch, ist es so schwer sich einmal selbst die Funktionsreferenz anzusehen? Darin sind Datumsfunktionen zu finden inkl. Beschreibung. Und wenn ein Statement nicht funktioniert, dann für das halt im Enterprise Manager oder im SQL Server Management Studio aus.
 

Deletemaster

Erfahrenes Mitglied
Hallo Norbert,

vielen Dank für den Tipp gewusst wo man suchen soll !
Ich habe im: Enterprise-Server zwar etwas gefunden, jetzt bekomme ich die Ausgabe:
TextBox1 17
TextBox2 2
TextBox 3 2007
Die SELECT:
DATEPART(day, geburtsdatum)
DATEPART(month, geburtsdatum)
DATEPART(year, geburtsdatum)

Ich habe aber dort nichts gefunden, wie ich den MONAT zweistellig anzeigen kann?

Danke
 

Deletemaster

Erfahrenes Mitglied
Hallo Norbert,
ich habe in diesem Programmteil ExecuteScalar(); verwendet.
Weiterhin habe ich vor den Inhalt dieser 3 TextBoxen zu einem "string Geburtsdatum" zu verketten:
string str_GeburtsDatum = str_GeburtsJahr + str_Trennzeichen + str_GeburtsMonat + str_Trennzeichen + str_GeburtsTag;

Mit diesem konnte ich unter MySql im Format yyyy-mm-dd das geänderte Datum in die Tabelle schreiben.
Jetzt bekomme ich logischerweise die Meldung: die Zeichenfolge wird nicht als gültige DateTime erkannt.
Mein Vorhaben ist es Fehleingaben wie fehlende Zeichen abzufangen, somit braucht der User nur Zahlen in die Textfelder schreiben.
 

Deletemaster

Erfahrenes Mitglied
Dafür ist die Lösungserweiterung:

DateTime _GeburtsDatum = Convert.ToDateTime(str_GeburtsDatum);

aber der Monat wird immer noch als 1stelleige Zahl angezeigt?
 

Deletemaster

Erfahrenes Mitglied
Hallo Niggo,
darüber habe ich etwas gefunden, jedoch bei ExecuteScalar nicht einzusetzen.
deshalb hatt ich die Formatierung im SELECT-String:
Code:
private void DatumsWerte_Fuellen()
{
           string str_VRN = txt_VRN.Text;

           SqlCommand cmd_GeburtsTag = new SqlCommand();
           SqlCommand cmd_GeburtsMonat = new SqlCommand();
           SqlCommand cmd_GeburtsJahr = new SqlCommand();

           cmd_GeburtsTag.Connection = conn;
           cmd_GeburtsMonat.Connection = conn;
           cmd_GeburtsJahr.Connection = conn;

           cmd_GeburtsTag.Parameters.Add("@vrn", str_VRN);
           cmd_GeburtsMonat.Parameters.Add("@vrn", str_VRN);
           cmd_GeburtsJahr.Parameters.Add("@vrn", str_VRN);

           cmd_GeburtsTag.CommandText = "SELECT DATEPART(day, geburtsdatum) FROM <tabelle> WHERE vrn = @vrn";
            cmd_GeburtsMonat.CommandText = "SELECT DATEPART(month, geburtsdatum) FROM <tabelle> WHERE vrn = @vrn";
            cmd_GeburtsJahr.CommandText = "SELECT DATEPART(year, geburtsdatum) FROM <tabelle> WHERE vrn = @vrn";

            //// Diese Funktion nur bei MYSQL
            ////cmd_GeburtsMonat.CommandText = "SELECT DATE_FORMAT(geburtsdatum, '%m') FROM <tabelle> WHERE vrn = @vrn";
            ////cmd_GeburtsJahr.CommandText = "SELECT DATE_FORMAT(geburtsdatum, '%Y') FROM <tabelle> WHERE vrn = @vrn";

            txt_GeburtsTag.Text = cmd_GeburtsTag.ExecuteScalar().ToString();
            txt_GeburtsMonat.Text = cmd_GeburtsMonat.ExecuteScalar().ToString();
            txt_GeburtsJahr.Text = cmd_GeburtsJahr.ExecuteScalar().ToString();


            SqlCommand cmd_Spielbeginn = new SqlCommand("SELECT spielbeginn FROM <tabelle> WHERE vrn = '" + str_VRN + "'", conn);
            SqlCommand cmd_Abschlussdatum = new SqlCommand("SELECT abschlussdatum FROM <tabelle> WHERE vrn = '" + str_VRN + "'", conn);
            SqlCommand cmd_LastUpdate = new SqlCommand("SELECT LastUpdate FROM <tabelle> WHERE vrn = '" + str_VRN + "'", conn);

            DateTime _Spielbeginn = Convert.ToDateTime(cmd_Spielbeginn.ExecuteScalar());
            DateTime _Abschlussdatum = Convert.ToDateTime(cmd_Abschlussdatum.ExecuteScalar());
            DateTime _LastUpdate = Convert.ToDateTime(cmd_LastUpdate.ExecuteScalar());

            //txt_GeburtsTag.Text = (cmd_GeburtsTag.ToString("dd.MM.yyyy")).ToString();

            txt_Spielbeginn.Text = (_Spielbeginn.ToString("dd.MM.yyyy")).ToString();
            txt_Abschlussdatum.Text = (_Abschlussdatum.ToString("dd.MM.yyyy")).ToString();
            txt_LastUpdate.Text = (_LastUpdate.ToString("dd.MM.yyyy")).ToString();
        }			
}

Bei den GeburtsDaten werden TAG MONAT JAHR in 3 TextBoxen angezeigt
Hier soll nun der MONAT 2-stellig angezeigt werden.
Habe aber nur die Möglichkeit day, month, year
Eine Explizite Typumwandlung ist hier nicht möglich.
Zumal beim UPDATE "Kein gültiges DatumsFormat mehr vorliegt (Tag, Monat, Jahr)
Die anderen Daten "Spielbeginn", Abschlussdatum" werden korrekt dargestellt.
Im auskommentierten sieht man wie es bei MySql gehandhabt wird.

Ist das zu verworren ausgedrückt?
Habe in der MSDN auch nachgesehen, aber nichts vergleichbares gefunden, um ein Datum in 3 Teile zu splitten UND den Monat 2-stellig auszugeben UND gültige Werte für ein UPDATE übergeben zu können.
 

Neue Beiträge