essu2307
Goto Top

Einen String in zwei Strings splitten per SQL

Hallo,

ich habe folgenden String in meiner Tabelle "accountingEntryExport_13344_UTC090040_23.csv.gz" nun möchte ich per SQL-Befehl den in zwei Teilen Splitten, den Zwischenteil rauslöschen und wieder zusammenfügen, damit mein String so ausschaut : "accountingEntryExport_23.csv.gz"
kann mir bitte jemand von euch helfen, mit welchem Befehl ich das Schaffe ???

Content-ID: 226626

Url: https://administrator.de/forum/einen-string-in-zwei-strings-splitten-per-sql-226626.html

Ausgedruckt am: 23.12.2024 um 18:12 Uhr

napperman
napperman 14.01.2014 um 11:40:35 Uhr
Goto Top
Moin!
Schau Dir mal die Befehle left() und right() an.
Damit klappt es wenn es immer von Links und rechts die gleiche Anzahl Zeichen sind.
109989
109989 14.01.2014 um 11:42:39 Uhr
Goto Top
Hallo

was für ein sqlserver hast du im einsatz ( oracle, mysql, mssql) ?
möchstest du den string einfach anzeigen oder in der tabelle umschreiben?

zum anzeigen bei mssql einfach : select SUBSTRING(name, 16,12) from tbl
essu2307
essu2307 14.01.2014 um 11:45:14 Uhr
Goto Top
ist leider nicht immer gleich viele Zeichen von Links und Rechts sind immer unterschiedlich,

ich konnte davor den String per VBA Code Splitten und so zusammenfügen wie ich es wollte, aber es war in Excel jetzt habe ich meine Quelldaten in Access als Tabellen eingepflegt und versuche es mit SQL.

hier der VBA Code vielleicht kann man daraus die Lösung ableiten
Sub trennen()
Dim Arr() As String
Dim Str As String
Dim links As String
Dim rechts As String
Dim ganz As String


HilfString = StringSpalte + "65535"
EndZeile = Range("C65535").End(xlUp).Row 'ermittelt die Zelle mit dem letzten Inhalt

Windows("Lieferplan.xlsm").Activate


For i = 2 To EndZeile - 1 Step 1
Sheets("Sammlung").Activate
Str = Cells(i, StringSpalte).Value
Arr = Split(Str, "_")
links = Arr(LBound(Arr))
rechts = Arr(UBound(Arr))
ganz = links & "_" & rechts
'Debug.Print ganz
Call abfragen(ganz)
Next i


End Su
essu2307
essu2307 14.01.2014 um 11:52:10 Uhr
Goto Top
es ist eine Leere Access Datenbank die aus zwei Tabellen besteht, diese Tabellen wurden aus Excel Sheets importiert
colinardo
colinardo 14.01.2014 aktualisiert um 15:12:33 Uhr
Goto Top
Hallo essu2307, Willkommen im Forum!
in Access kannst du es auch via VBA machen. Das Script durchläuft alle Zeilen der Tabelle und ändert den Inhalt der Spalte entsprechend.:
(In Zeile 2 noch den Namen der Tabelle und in Zeile 3 den Namen der Spalte in dieser Tabelle eintragen)
Sub ModifyColumn()
    tblName = "Accounting"  
    colName = "DeinSpalte"  
    Dim rs As Recordset
    Set rs = CurrentDb.OpenRecordset(tblName)
    rs.MoveFirst
    While Not rs.EOF
        If Trim(rs.Fields(colName).Value) <> "" Then  
            arrParts = Split(rs.Fields(colName).Value, "_", -1, vbTextCompare)  
            rs.Edit
            rs.Fields(colName).Value = arrParts(0) & "_" & arrParts(3)  
            rs.Update
        End If
        rs.MoveNext
    Wend
End Sub
oder wenn die Anzahl an Unterstrichen dazwischen unterschiedlich sein kann nimmst du diese Variante
Sub ModifyColumn()
    tblName = "Accounting"  
    colName = "DeinSpalte"  
    Dim rs As Recordset
    Set rs = CurrentDb.OpenRecordset(tblName)
    Set regex = CreateObject("vbscript.regexp")  
    regex.Pattern = "^([^_]+_).*_([^_]+)$"  
    rs.MoveFirst
    While Not rs.EOF
        If rs.Fields(colName).Value <> "" Then  
            strInhalt = rs.Fields(colName).Value
            Set matches = regex.Execute(strInhalt)
            rs.Edit
            rs.Fields(colName).Value = matches(0).submatches(0) & matches(0).submatches(1)
            rs.Update
        End If
        rs.MoveNext
    Wend
End Sub
Grüße Uwe
Chmumann
Lösung Chmumann 14.01.2014 aktualisiert um 15:12:10 Uhr
Goto Top
Hi essu2307,

probier mal das hier aus:
SELECT 
'accountingEntryExport_13344_UTC090040_23.csv.gz' AS 'Org',  
LEFT('accountingEntryExport_13344_UTC090040_23.csv.gz', CHARINDEX('_', 'accountingEntryExport_13344_UTC090040_23.csv.gz', 1)) AS 'Left',  
RIGHT('accountingEntryExport_13344_UTC090040_23.csv.gz', LEN('accountingEntryExport_13344_UTC090040_23.csv.gz') - PATINDEX('%_[0-9][0-9].csv.gz','accountingEntryExport_13344_UTC090040_23.csv.gz')) AS 'Right'  

Im Grunde genommen musst nur noch den richten Feldnamen einfügen.
SELECT 
[DeinFeldname] AS 'Org',  
LEFT([DeinFeldname], CHARINDEX('_', [DeinFeldname], 1)) AS 'Left',  
RIGHT([DeinFeldname], LEN([DeinFeldname]) - PATINDEX('%_[0-9][0-9].csv.gz',[DeinFeldname])) AS 'Right',  
LEFT([DeinFeldname], CHARINDEX('_', [DeinFeldname], 1)) +  
RIGHT([DeinFeldname], LEN([DeinFeldname]) - PATINDEX('%_[0-9][0-9].csv.gz',[DeinFeldname])) AS 'Combi'  

LG Chmumann
essu2307
essu2307 14.01.2014 um 15:08:17 Uhr
Goto Top
Perfekt vielen Dank Uwe klappt sehr gut
essu2307
essu2307 14.01.2014 um 15:12:11 Uhr
Goto Top
Danke Chmumann klappt auch gut :D:D