Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Datum aus Text in SQL-Abfrage

Forumthread: Datum aus Text in SQL-Abfrage

Datum aus Text in SQL-Abfrage
15.09.2022 12:10:02
Stefan
Liebes Forum,
ich habe im SQL-Server eine Tabelle mit Daten, unter anderem ein Datumsfeld, was beim Einlesen in Excel über VBA leider nur als Text eingelesen wird.
Jetzt möchte in der Abfrage, den Wert direkt in ein Datum umwandeln.

Sub AbfrageSQL_X001()
Dim cnnConnect   As ADODB.Connection
Dim rstRecordset  As ADODB.Recordset
Dim strSQL           As String
Dim qQuery           As QueryTable
strSQL = "SELECT Auftragsauskunft_0.Object, " & _
"Auftragsauskunft_0.Liefertermin" & vbCrLf
strSQL = strSQL & "FROM Auftragsauskunft hma_Auftragsauskunft_0 " & vbCrLf
Set cnnConnect = New ADODB.Connection
cnnConnect.Open strConnSQL_Server
cnnConnect.CommandTimeout = 0
Set rstRecordset = New ADODB.Recordset
rstRecordset.Open Source:=strSQL, _
ActiveConnection:=cnnConnect, _
LockType:=adLockReadOnly, _
Options:=adCmdText
With ActiveSheet.QueryTables.Add( _
Connection:=rstRecordset, _
Destination:=Range("A3"))
.FieldNames = False
.RefreshStyle = xlInsertDeleteCells
.Refresh BackgroundQuery:=False
End With
END SUB
Ich habe schon versucht mit Dateserial() die einzelnen Werte zu übergeben, mit CDATE() oder nur mit DATE(),
aber alle Versuche endeten mit der Fehlermeldung DATESERIAL wird nicht als Name einer integrierten Funktion erkannt.
Ich hoffe mir kann jemand einen Tipp geben.
Vielen Dank
Stefan
Anzeige

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Datum aus Text in SQL-Abfrage
15.09.2022 12:28:02
Stefan
Hallo Forum,
ich noch einmal.
Wenn ich in der Abfrage schreibe

"YEAR(Auftragsauskunft_0.Liefertermin), " & _
wird es auch als Jahr extrahiert. Genauso DAY() und MONTH().
Nur das komplette Datum mit DATE() oder DATESERIAL() funktioniert nicht.
Gruß Stefan
Anzeige
AW: Datum aus Text in SQL-Abfrage
15.09.2022 13:39:28
Stefan
Hallo Ralf,
danke für deine Antwort. Leider bringt sie mich noch nicht weiter, denn ich habe das Problem nicht in der WHERE - Abfrage, da habe ich das Format schon umgesetzt, ich habe das Problem in der Select - Anweisung, in dem Beispiel vereinfach mit Select *. An der Stelle möchte ich schon die Umwandlung haben.
Also Select YEAR(Auftragsauskunft.Termin) FROM .... funktioniert und gibt z.B. den Wert 2022 zurück.
Select Format(Auftragsauskunft.Termin,'dd.mm.yyyy') FROM .... gibt die Fehlermeldung Der Argumentdatentyp nvarchar ist für das 1-Argument der Format-Funktion ungültig.
SELECT DATE(Auftragsauskunft.Termin) FROM ... gibt die Fehlermeldung DATE wird nicht als Name einer integrierten Funktion erkannt.
ebenso DATESERIAL oder CDATE.
Gruß Stefan
Gruß Stefan
Anzeige
AW: Datum aus Text in SQL-Abfrage
16.09.2022 20:05:59
Piet
Hallo
könnte es so klappen, indem du das Datum über einen Text String mit Punkten aufbaust? Ein Versuch ist es wert.
mfg Piet
  • 
    Sub test()
    Dim LftDatum As Variant, NewDatum As Date
    LftDatum = Auftragsauskunft_0.Liefertermin
    NewDatum = CDate(Day(LftDatum) & "." & Month(LftDatum) & "." & Year(LftDatum))
    'oder so probieren:  zuerst String bilden, dann in CDate umwandeln
    NewDatum = CDate(CStr(Day(LftDatum) & "." & Month(LftDatum) & "." & Year(LftDatum)))
    End Sub
    

  • Anzeige
    AW: Datum aus Text in SQL-Abfrage
    15.09.2022 14:31:16
    Michael
    Hallo Stefan,
    aber mit der Formatierung als Text, wird doch das Datum nicht zum Datum...?
    Was wäre, wenn Du die Spalte mit cast(Auftragsauskunft_0.Liefertermin as Integer) als Zahl selektierst und die importierten Daten dann in Excel als Datum formatierst?
    VG Michael
    AW: Datum aus Text in SQL-Abfrage
    15.09.2022 15:30:42
    Stefan
    Hallo Michael,
    ich weiß nicht ob die Nachricht jetzt doppelt ist.
    Mit dem Cast wollte ich einmal im SQL-Server ausprobieren, ob es nun mit der Zählweise in Excel übereinstimmt, mag ich zu bezweifeln.
    Was mich wundert ist, dass ich ja über den SELECT YEAR(Auftragsauskunft.Termin) das richtige Jahr bzw. den Monat oder den Tag ermitteln kann.
    Somit müsste das Feld ja ein Datumsfeld sein, sonst könnte ich nicht die einzelnen Datumskomponenten extrahieren.
    Ich habe mir über den Recorder jetzt einmal die Query aufgebaut und versuche sie als Programm umzuschreiben. Wenn mir nichts anderes übrigbleibt,
    muss ich leider den Weg gehen, der mir nicht so gut gefällt.
    Gruß Stefan
    Anzeige
    ;

    Forumthreads zu verwandten Themen

    Anzeige
    Anzeige

    Infobox / Tutorial

    Datum aus Text in SQL-Abfrage umwandeln


    Schritt-für-Schritt-Anleitung

    1. VBA-Modul erstellen

      • Öffne Excel und drücke ALT + F11, um den VBA-Editor zu starten.
      • Füge ein neues Modul hinzu (Einfügen > Modul).
    2. SQL-Verbindung aufbauen

      • Verwende den folgenden Code, um eine Verbindung zu deinem SQL-Server herzustellen:
      Dim cnnConnect As ADODB.Connection
      Set cnnConnect = New ADODB.Connection
      cnnConnect.Open strConnSQL_Server
    3. SQL-Abfrage mit Datum umwandeln

      • Um das Datum aus einem Text zu konvertieren, kannst du eine SQL-Abfrage wie folgt gestalten:
      SELECT CAST(Auftragsauskunft_0.Liefertermin AS DATETIME) AS Liefertermin
      FROM Auftragsauskunft hma_Auftragsauskunft_0
    4. Datum in VBA konvertieren

      • Wenn du nach dem Import in Excel das Datum umwandeln möchtest, kannst du CDate verwenden:
      Dim LftDatum As Variant
      LftDatum = Auftragsauskunft_0.Liefertermin
      NewDatum = CDate(LftDatum)

    Häufige Fehler und Lösungen

    • Fehler: DATESERIAL wird nicht als Name einer integrierten Funktion erkannt.

      • Stelle sicher, dass du die Datumskomponenten korrekt übergibst. Ansonsten kannst du CDate oder DateValue verwenden.
    • Fehler: Der Argumentdatentyp nvarchar ist für das 1-Argument der Format-Funktion ungültig.

      • Überprüfe, ob das Datumsfeld tatsächlich als Text eingelesen wird. Verwende CAST oder CONVERT, um das Format zu ändern.

    Alternative Methoden

    • SQL Server-Funktion verwenden: Nutze TRY_CONVERT oder CAST, um den Text in ein Datum umzuwandeln. Beispiel:

      SELECT TRY_CONVERT(DATETIME, Auftragsauskunft_0.Liefertermin) AS Liefertermin
      FROM Auftragsauskunft hma_Auftragsauskunft_0
    • Excel-Funktion: Du kannst auch die Funktion TEXT in Excel verwenden, um ein Datum aus einem Textstring zu erstellen:

      =TEXT(A1, "dd.mm.yyyy")

    Praktische Beispiele

    1. Datum aus Text in SQL umwandeln:

      SELECT FORMAT(CAST(Auftragsauskunft_0.Liefertermin AS DATETIME), 'dd.MM.yyyy') AS Liefertermin
      FROM Auftragsauskunft hma_Auftragsauskunft_0
    2. VBA-Beispiel für CDate:

      Sub Beispiel()
         Dim LftDatum As String
         Dim NewDatum As Date
         LftDatum = "2023-01-01"
         NewDatum = CDate(LftDatum)
      End Sub

    Tipps für Profis

    • Verwende SQL Server DATEDIFF: Um die Differenz zwischen zwei Daten zu berechnen, kannst du die Funktion DATEDIFF nutzen.

    • Datum formatieren: Um das Datum in einem bestimmten Format anzuzeigen, nutze FORMAT in der SQL-Abfrage, z.B. FORMAT(Auftragsauskunft_0.Liefertermin, 'dd.MM.yyyy').

    • Automatisierung: Denke daran, deine VBA-Skripte zu optimieren, um wiederkehrende Aufgaben zu automatisieren, wie das Abrufen und Konvertieren von Daten.


    FAQ: Häufige Fragen

    1. Wie kann ich sicherstellen, dass das Datum richtig formatiert wird?
    Verwende CAST oder CONVERT in deiner SQL-Abfrage, um sicherzustellen, dass der Datentyp korrekt ist.

    2. Was mache ich, wenn ich mit Text statt mit Datum arbeite?
    Nutze die Funktion CDate in VBA oder die SQL-Funktionen CAST und CONVERT, um den Text in ein Datum umzuwandeln.

    Beliebteste Forumthreads (12 Monate)

    Anzeige
    Anzeige
    Anzeige