Microsoft Excel

Herbers Excel/VBA-Archiv

Informationen und Beispiele zum Thema MsgBox
BildScreenshot zu MsgBox MsgBox-Seite mit Beispielarbeitsmappe aufrufen

SQL Datenkonvertierung (Text->Datum)

Betrifft: SQL Datenkonvertierung (Text->Datum) von: Arthur
Geschrieben am: 17.04.2014 12:43:37

Hallo Herber-Forum.

Zur Datenaufbereitung hole ich mir aus einer Exceltabelle Werte per SQL (ADODB) in eine andere. Nun nage ich an einem Problem:

(Angebliche) Datumswerte in einer Spalte sind als Text gespeichert [bspw. '12 Mar 2014']. Dadurch funktioniert 'Select Max(PlanDatum)' nicht. Es siegt immer der '31. Sep', weil in textlicher Sortierung am größten. Beim einfachen Auslesen der Werte erkennt SQL den Datentyp und wandelt die Werte in ein Datum um; so kommen sie jedenfalls in Excel an. Innerhalb der Max()-Funktion funktioniert das offenbar nicht.

Die theoretische Lösung: 'Select Max( MacheinDatumAus(PlanDatum) )'

Hürden:
- Die 'MacheinDatumAus'-Funktion kenne ich nicht.
- Das Datum liegt in englischer Sprache (Mar, Oct, Dec) vor, wobei Office auf deutsch steht.

Wär super, wenn jemand eine Lösung hätte.

Danke, Arthur

  

Betrifft: AW: SQL Datenkonvertierung (Text->Datum) von: Philipp
Geschrieben am: 17.04.2014 13:07:02

Hallo Arthur,

spontan fällt mir jetzt ein, die Monate per Select Case auf deutsch zu übersetzen und ggfls. zusätzlich mit CDate() konvertieren.

Gruß

Philipp


  

Betrifft: AW: SQL Datenkonvertierung (Text->Datum) von: Arthur
Geschrieben am: 17.04.2014 14:08:27

Hi zusammen.

Die Antwort von Philipp hat mich mit CDATE() ein Stück weiter gebracht. Datumstexte, die in deutscher Nomenklatur abgelegt sind ('12 Dec 2014' beispielsweise) werden weiterhin nicht erkannt .. weil ich mit dem Select Case innerhalbt einem SQL-Commands nichts anfangen kann .. .
Möglicherweise deswegen, wenn auch nicht gesichtert, streikt der SQL, sobald die Max()-Funktion hinzu kommt.

Wenn noch jemand eine Idee hat, nur her damit. Würde mich freuen.

Gruß, Arthur


  

Betrifft: AW: SQL Datenkonvertierung (Text->Datum) von: Philipp
Geschrieben am: 17.04.2014 14:11:44

Hallo Arthur,

versteh das Problem nicht ganz.
Du packst die Werte aus einer Excel doch in eine andere, oder? Sobald die Daten in Excel sind, sind die SQL Befehle ja relativ egal.
Da kannst Du doch alles in deutsche Nomenklatur packen ('Dec' ist aber nicht deutsch, oder?) und dann CDate() machen, oder nicht?

Gruß

Philipp


  

Betrifft: AW: SQL Datenkonvertierung (Text->Datum) von: Arthur
Geschrieben am: 17.04.2014 14:22:14

Hallo Philipp.

Das Datum ist nicht der einzige Wert, der 'importiert' werden soll. Heißt, dass aus mehreren Tabellen die Werte zusammengesucht werden. Eine Lösung über eine zusätzliche Hilfstabelle fällt dabei aus, weil kompliziert. Konkret soll mit der MAX()-Funktion zu den per einfachem SELECT(..) gefundenen Daten der letzte Termin hinzugefügt werden.

"SELECT ID,Name,etc FROM MyTab ORDER BY ID"
Für die Kombination ID,Name ist im Grunde die ID bereits eindeutig, kommt jedoch in Bezug auf das Datum (in Textformat) mehrfach vor. Was fehlt ist eben die Selektion nach ID und das letzte Datum bei dieser ID.

Ich hoffe, dass mein Problem nun ein wenig klarer geworden ist.

Gruß, Arthur


  

Betrifft: AW: SQL Datenkonvertierung (Text->Datum) von: Oberschlumpf
Geschrieben am: 17.04.2014 14:46:05

Hi Arthur

ich geb Phillip recht.

Das Einlesen mit SQL und Aufrufen der Funktion MAX() geschieht doch NICHT GLEICHZEITIG, sondern Eins nach dem Anderen.

1. So kannst du die Werte doch zuerst mit SQL einlesen, einer Zelle oder Variablen zuordnen.
2. BEVOR jetzt MAX() oder andere Funktionen, die Fehler verursachen, zum Einsatz kommen, ändere die "Jan","Feb","Mar"..."Dec" Werte in Zelle oder Variable mit z Bsp Select Case in rechenbare Datumswerte um
3. JETZT kommt MAX() oder was auch immer zum Einsatz

Und wenn das auch nicht hilft, kann zumindest ich OHNE Bsp-Datei + Code auch nicht helfen.

Hilfts denn?

Ciao
Thorsten


  

Betrifft: AW: SQL Datenkonvertierung (Text->Datum) von: EtoPHG
Geschrieben am: 17.04.2014 15:03:01

Hallo Arthur,

Pack das Problem an der Wurzel: Ich kenne kein DB System, dass nicht auch Datums-Formatierungs/Konvertierungs Functions zur Verfügung stellt.
Für Oracle könnte dann z.B. ein SQL so lauten:

SELECT TO_CHAR(sysdate, 'DD.MM.YYYY') FROM dual;
, was dir ein XL-'kompatibles' Datum zurückliefert.

Gruess Hansueli


  

Betrifft: AW: SQL Datenkonvertierung (Text->Datum) von: Tino
Geschrieben am: 18.04.2014 09:58:06

Hallo,
hier mal ein Beispiel dieses Datum umzuwandeln.

Sub Beispiel()
Dim varMonate(), n&
Dim varDatum

'zuerst die Monatsnamen gekürzt/englisch 
With Application
    Redim varMonate(1 To 12)
    For n = 1 To 12
        varMonate(n) = .Text(DateSerial(2014, n, 1), "[$-409]MMM")
    Next n
End With
''oder auch so 
'varMonate = Array("Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec") 



varDatum = "12 Jan 2014" 'Datum aus Abfrage 
varDatum = Split(varDatum, " ")
varDatum = DateSerial(varDatum(2), Application.Match(varDatum(1), varMonate, 0), varDatum(0))
MsgBox varDatum

'oder so 
varDatum = "12 Dec 2014" 'Datum aus Abfrage 
varDatum = DateSerial(Split(varDatum, " ")(2), Application.Match(Split(varDatum, " ")(1), varMonate, 0), Split(varDatum, " ")(0))
MsgBox varDatum

End Sub
Gruß Tino