Rubrik: Datenbanken · Sonstiges | VB-Versionen: VB6 | 29.08.12 |
MID-Funktion im SQL-Statement Dieser Code zeigt, wie man innerhalb einer SQL-Abfrage die bekannte MID-Funktion verwenden kann - sowohl für Access-Datenbanken, als auch MS SQL Server Datenbanken. | ||
Autor: Dieter Otter | Bewertung: | Views: 7.910 |
www.tools4vb.de | System: WinXP, Win7, Win8, Win10, Win11 | kein Beispielprojekt |
Und noch einmal zum Thema SQL-Abfragen mit integrierten Berechnungsfunktionen. Heute erweiter wir die universelle Funktion dbSQLFunc aus unserem vorigen Tipp um den Mid-Parameter, mit dem sich eine Teil-Zeichenkette für einen Abfragevergleich oder auch eine Ausgabe erstellen lässt.
' VBA-Funktionen / SQL-Funktionen Public Function dbSQLFunc(ByVal sFunc As String, ParamArray vExpr() As Variant) As String Select Case UCase$(sFunc) ' IIf(...,...,...) Funktion Case "IIF" If DbSystem = dbMSAccess Then dbSQLFunc = "IIf(" & vExpr(0) & "," & vExpr(1) & "," & vExpr(2) & ")" Else dbSQLFunc = "CASE WHEN " & vExpr(0) & " THEN " & vExpr(1) & " ELSE " & vExpr(2) & " END" End If ' DateDiff-Funktion ' Erwartet wird ein Feldname oder ein Datum im Format dd.mm.yyyy Case "DATEDIFF" Dim vDate1 As String Dim vDate2 As String If DbSystem = dbMSAccess Then vDate1 = vExpr(1) vDate2 = vExpr(2) If (InStr(vDate1, "-") Or InStr(vDate1, ".")) And _ (InStr(vDate1, "[") = 0) And (Left$(vDate1, 3) <> "tbl") Then vDate1 = "#" & Format$(CDate(vDate1), "mm-dd-yyyy") & "#" End If If (InStr(vDate2, "-") Or InStr(vDate2, ".")) And _ (InStr(vDate2, "[") = 0) And (Left$(vDate2, 3) <> "tbl") Then vDate2 = "#" & Format$(CDate(vDate2), "mm-dd-yyyy") & "#" End If dbSQLFunc = "DATEDIFF('" & vExpr(0) & "'," & ReplaceEx(vDate2, "[", "]", "") & "," & _ ReplaceEx(vDate1, "[", "]", "") & ")" Else vDate1 = vExpr(1) vDate2 = vExpr(2) If (InStr(vDate1, "-") Or InStr(vDate1, ".")) And _ (InStr(vDate1, "[") = 0) And (Left$(vDate1, 3) <> "tbl") Then vDate1 = "'" & Format$(CDate(vDate1), "dd.mm.yyyy") & "'" End If If (InStr(vDate2, "-") Or InStr(vDate2, ".")) And _ (InStr(vDate2, "[") = 0) And (Left$(vDate2, 3) <> "tbl") Then vDate2 = "'" & Format$(CDate(vDate2), "dd.mm.yyyy") & "'" End If dbSQLFunc = "DATEDIFF(" & vExpr(0) & "," & ReplaceEx(vDate2, "[", "]", "") & "," & _ ReplaceEx(vDate1, "[", "]", "") & ")" End If ' Mid(...) Funktion Case "MID" If DbSystem = dbMSAccess Then dbSQLFunc = "Mid(" & vExpr(0) & "," & CStr(vExpr(1)) & "," & CStr(vExpr(2)) & ")" Else dbSQLFunc = "SUBSTRING(" & vExpr(0) & "," & CStr(vExpr(1)) & "," & CStr(vExpr(2)) & ")" End If End Select End Function
Je nach verwendetem Datenbanksystem (Access oder SQL-Server) generiert die Funktion dbSQLFunc die korrekte SQL-Syntax.
Beispiel:
' Nur das erste Zeichen eines Feldes selektieren sSQL = "SELECT " & dbSQLFunc("MID", "KdName", 1, 1) & " FROM ..."