2016-06-14 14 views
1

Derzeit habe ich ein Excel-Blatt, in dem ich ein Start-Datum und ein End-Datum eingegeben habe, die zum VBA-Code gehen und es in eine SQL-Abfrage eingeben. Das Problem, das ich gerade habe, ist, dass ich einen Fehler erhielt:Wie wird das Datum in Excel geändert, damit das Datum bei einer SQL-Abfrage ausgeführt wird?

ORA-01843 not a valid month because the Excel is importing the date as 05/01/2016 and the query needs to be 05-may-2016 .

Wie ändere ich das ?? Hier

ist der Code für das Start- und Enddatum:

startDate = Worksheets("Sheet1").Range("B4").Text 
endDate = Worksheets("Sheet1").Range("B6").Text 

dbConnectStr = "Provider=msdaora;User Id=" & Uname 
dbConnectStr1 = "Provider=msdaora;User Id=xxendur ;Data Source=" & DSN 

Set Sql.ActiveConnection = objmyconn 
Sql.CommandText = "select system_date from syit_act_log where system_date between`enter code here` 'startDate' AND 'endDate' and action_id = 15 and log_desc not like '%svc_openlink_p%' order by system_date" 
Sql.CommandType = adCmdText 
Sql.Execute 
+1

verwenden, um ein 'yyyymmdd' Datumsformat zu verwenden, wird empfohlen. – Jeeped

+1

Um die Antwort von @Jeeped zu verdeutlichen, sollte die 'where' -Klausel etwa so aussehen:' where system_date zwischen '20160505' und '20160505'' – Ralph

+0

Ich erhalte immer noch den Laufzeitfehler "kein gültiger Monat" glaube ich Das liegt daran, dass in Excel das Datum immer noch der 01.03.2016 ist. Ich versuche, das Format des Datums in Excel zu ändern, aber wenn ich es tue, ändert nur die Anzeige, aber nicht die Zahl, die in FX gezeigt wird, wenn ich auf die Zelle klicke. @Jeeped –

Antwort

4

Sie benötigen eine Datumsvariablen mit dieser Formatierung einzustellen:

startDate = Format(Worksheets("Sheet1").Range("B4").Value2, "dd-mmm-yyyy") 
endDate = Format(Worksheets("Sheet1").Range("B6").Value2, "dd-mmm-yyyy") 
'startDate and endDate will be look like "05-May-2016" 

Die dreifache mmm gibt Ihnen die Monatsnamen als du hast angefragt. Verwenden Sie dann diese Variablen in Ihrer Abfrage.

Edit:

Als Ralph und Jeeped es den Vorschlag, yyyymmdd Standard

startDate = Format(Worksheets("Sheet1").Range("B4").Value2, "yyyymmdd") 
endDate = Format(Worksheets("Sheet1").Range("B6").Value2, "yyyymmdd") 
+0

Ich möchte zwei Verbesserungen für Ihre Antwort vorschlagen: (1) Sie verwenden '.Text' anstelle von' .Value2'. Daher funktioniert der Code möglicherweise nicht, wenn die Zelle beispielsweise mit Hindi-Datum formatiert ist. Außerdem wird das Datum möglicherweise falsch interpretiert, wenn Sie es im britischen Format anzeigen, aber das Excel mit dem Gebietsschema USA ausgeführt wird. (2) Sie schlagen "dd-mmmm-yyyy" vor, was das OP angefordert hat. Der SQL-Server könnte es jedoch erneut falsch interpretieren, wenn sich ein anderer Benutzer mit einer anderen Sprache 'set' am Server anmeldet. [ISO 8601] (https://en.wikipedia.org/wiki/ISO_8601) ist besser, wie von @Jeeped vorgeschlagen. – Ralph

Verwandte Themen