Krug Markus.de

Solution Architect & IT Business Consulting

Schlagwort: date

Variablen Syntax in SQL Strings unter VBA

SQL Statements werden unter VBA wahlweise gleich in einen String oder idealer, in einer String-Variable definiert.

Beispiel für ein SQL Statement in einer String-Variable:

[vb]

Sub SQL_Beispiel()

Dim query1 As String

query1 = "Select Spalte from Tabelle
where
Spalte3 = ZahlenWert
and
Spalte2 =’StringWert‘
and
Spalte3 = ‚DatumsWert‘ "

End Sub

[/vb]

Jetzt sollen die Werte für Tabellenname, Spalte, Spalte1, Spalte2 und Spalte3 durch Variablen ersetzt werden.

[vb]

Sub SQL_Beispiel_mit_Variablen()

Dim query1 As String

query1 = "Select " + String-Spaltenname + "
from
" + String-Tabellenname + "
where
Spalte3 = " & ZahlWert & "
and
Spalte2 =’" + StringWert + "‘
and
Spalte3 = ‚" & Datum & "‘ "

End Sub

[/vb]

Wenn wir jetzt genau hinschauen, gibt es Unterschiede in der Syntax bei den unterschiedlichen Variablentypen String, Integer und Date.

Zunächst zur Syntax von SQL. Innerhalb der Anführungszeichen der VBA Stringvariable gilt die Syntax von SQL ANSI.

String- (VarChar)  Und Datums-Werte(Date)  werden in der SQL Syntax in einfachen Anführungszeichen gesetzt.  Zahlen-Werte( Number) ohne Anführungszeichen. Damit VBA Variablen innerhalb der SQl Syntax genutzt werden können, muss der Code gesplittet werden. D.h. der VBA String muss unterbrochen und fortgesetzt werden. Die geschieht wie üblich bei VBA mit Hilfe der doppelten Anführungszeichen. Schauen wir uns den Zahlenwert nach dem where Operator an. Mit einem doppelten Anführungszeichen wird der VBA String beendet und hier beginnt wieder die VBA Syntax.

Wenn wir nun eine Integer Variable verwenden wollen, müssen wir als Verknüpfungsoperator das & Zeichen wählen. Dann setzen  wir nach der Integer Variable wieder den Verknüpfungsoperator &. Jetzt  beginnen wir wieder mit dem VBA String mit seinem darin liegenden SQL Statement mit einem doppelten Anführungszeichen und setzen diesen fort.

Nun kommen wir an der Stelle an, an der wir eine Stringvariable für den Wert der Splate2 nutzen möchten. Es wird wieder der String mit einem doppelten Anführungszeichen beendet und die VBA Syntax beginnt. Wir müssen dabei beachten, das wir erst nach dem ersten einfachen Anführungszeichen den String beenden. Bei Stringvariablen muss als Verknüpfungsoperator das + Zeichen verwendet werden. Anschließend beginnen wir wieder mit einem doppelten Anführungszeichen den String. Wenn wir an der  Stelle für den Datums-Wert gelangt sind, beenden wir erneut mit dem doppelten Anführungszeichen den String und halten uns an der VBA Syntax.

Hier gilt eine Besonderheit zu beachten.

Datums-Werte werden unter SQL wie ein String behandelt, also in einfachen Anführungszeichen. Unsere Logik nach sollten wir dann wie bei einer String Variablen unter VBA das + Zeichen als Verknüpfungsoperator verwenden.

Dies ist dem nicht so, denn eine Datum-Variable wird unter VBA mit dem Verknüpfungsoperator & wie eine Integer Variable behandelt.  Deswegen gilt die Syntax ‚ “ & Datums-Variable & “ ‚!

Oracle Sysdate Wert aus einer Datumsspalte per SQL auslesen

Folgendes Problem:

Ich möchte aus einer Oracle Datenbank einen Wert aus einer Datumsspalte auslesen. Dieser Wert wurde über einen Datenbank-Trigger mittels Sysdate ( Oracle Datenbank Funktion : aktuelles Datum) in die Datumsspalte eingetragen.

Wenn man nun über:

[sql]Select (Spalte) from Tabellenname where Datumsspalte = ‚26.05.11‘[/sql]

Daten selektieren möchte, werden  keine Daten angezeigt, da keine Daten mit diesem Datum gefunden werden.

Das Problem besteht darin, das Oracle in diesem Fall ( hiesige Systemeinstellungen)  selbst das Datum über Sysdate im Format

[sql]dd/mm/yy:hh:mi:ssam[/sql]

übergibt. Wir sehen zwar in der in der Spalte das Format:

dd.mm.yy

aber selektieren müssten wir über

[sql]dd/mm/yy:hh:mi:ssam[/sql]

Ich möchte aber das Format dd.mm.yy selektieren.

Um dies zu bewerkstelligen muß ich folgende Syntax in SQL anwenden:

[sql]Select Spalte from Tabellenname where TO_Date(Datumsspalte,’dd.mm.yy‘)=’26.05.11′[/sql]

Wenn ich jetzt über einen Zeitraum Daten selektieren möchte muß folgende Sysntax angewendet werden:

[sql]Select Spalte from Tabellenname where Datumsspalte between to_date(‚24.05.11′,’dd.mm.yy‘) and to_date(‚26.05.11′,’dd.mm.yy‘)[/sql]

.

Präsentiert von WordPress & Theme erstellt von Anders Norén