PDA

Vollständige Version anzeigen : Finden und Ersetzen im String


amahr78
22.03.2004, 10:34
Hi Leute,
ich habe ein kleines Problem. Ich habe einen String wie zb. diesen hier:

WHERE PG_ID IN ('spM') AND ((Status = 1 AND Beginn <= '21.10.2003') OR (Status =-1 AND Beginn <= '21.10.2003' AND K_Datum > '21.10.2003') OR (Status = 2 AND Beginn <= '21.10.2003' AND K_Datum > '21.10.2003'))

Da das Datumsformat nicht mit Access komform ist, änder ich es über folgenden Code um:


x = InStr(sql, "((")
If x <> 0 Then
strm = Mid(sql, x)
strl = Left(sql, x - 1)

strmTmp = Replace(strm, ".", "-")
strmTmp = Replace(strm, "/", "-")

If strmTmp <> strm Then
strm = Replace(strmTmp, "'", "#")
End If

sql = strl + strm
End If


einbezogen ist dami auch schon die möglichkeit das anstelle von "." ein "/" stehen kann.
Jetzt kann es aber vorkommen, das das Datumsformat wie folgt aus sieht
'20040322'
Wie kann ich daraus jetzt mein benötigtes Format herstellen? Es funktioniert entweder YYYY-MM-DD oder DD-MM-YYYY.
Wie kann ich das in Verbindung mit meinem String erreichen?

StehtimSchilf
22.03.2004, 11:30
hi amahr78,

ich würde Dir vorab eine kleine SuchFunktion schreiben:

function searchStringX(s as string, strPattern as String, optional intMinLength as int, optional intMaxLength as int) as string

Als Pattern Werte wie folgende übergeben:
*
?
Fixes Zeichen!
In Deinem Fall wäre Pättern = '*' (' weil dein Datum in Hochkommatas eingeschlossen sind, * für beliebige Zeichen, anschliessend mit intMinLength = 8 und maxlength = 10 die Grösse des Suchsstrings eingrenzen!

Nun lässt du Deine Funktion auf Deinen String los!

Als Resultat liefert er Dir nun
'21.10.2003'
oder eben
'20040322'

Diesen Wert fütterst Du nun in die Replace Funktion! Fertig!

Die zuerstellende funktion serchStringX() kann ich Dir nicht gerade so hinposten.... aber sollte kein problem sein!
Du kannst natürlich eine auf Deine Bedürfnisse vereinfachte Version schreiben!

Function a(s as string) as string

dim strTmp as string
dim i as integer
dim j as integer

for i = 0 to len(s)
if mid(i,1,s) = "'" then
j = i
do until mid(j,1,s) = "'"
strtmp = strtmp & mid(j,1,s)
loop
if isdate(strtmp) or .........
a = strtmp
exit function
endif
strmp = ""
i = j
endif
next i
end function
so in etwa
Erläuterung:
suche einfach die Strings zwischen den Hochkommatas.... die Krietieren zur Erfüllung kansnt Du ja selber noch genauer spezifizieren...

Gruz
SiS

TommyK
22.03.2004, 11:35
Hallo,

schalte Doch folgende Code vor Deinem Code:
Dim strConvertDate As String
If InStr(1, strDatum, ".", vbTextCompare) = 0 And InStr(1, strDatum, "/", vbTextCompare) = 0 Then
strConvertDate = Right(strDatum, 2) & "-" & MiD(strDatum, 5, 2) & "-" & left(strDatum, 4)
Else
'...hier käme Dein Teil
End If

Im der erste Teil wird ausgeführt wenn weder "." noch "/" im String vorkommt, ansonsten dann Teil Teil der in die Else-Anweisung müsste.

kama
22.03.2004, 11:50
Hallo

ergibt das

22-03-2004

Da auch 22.03.2004 als eingang korrekt ausgegeben wird bleibt nur die Abfrage nach /

If Instr(1,deinwert,"/",1) = 0 then
deinwert=Format(Datevalue(format("20040322","####-##-##")),"dd-mm-yyyy")

endif