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-Key: 226626

Url: https://administrator.de/contentid/226626

Printed on: April 20, 2024 at 04:04 o'clock

Member: napperman
napperman Jan 14, 2014 at 10:40:35 (UTC)
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.
Mitglied: 109989
109989 Jan 14, 2014 at 10:42:39 (UTC)
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
Member: essu2307
essu2307 Jan 14, 2014 at 10:45:14 (UTC)
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
Member: essu2307
essu2307 Jan 14, 2014 at 10:52:10 (UTC)
Goto Top
es ist eine Leere Access Datenbank die aus zwei Tabellen besteht, diese Tabellen wurden aus Excel Sheets importiert
Member: colinardo
colinardo Jan 14, 2014 updated at 14:12:33 (UTC)
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
Member: Chmumann
Solution Chmumann Jan 14, 2014 updated at 14:12:10 (UTC)
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
Member: essu2307
essu2307 Jan 14, 2014 at 14:08:17 (UTC)
Goto Top
Perfekt vielen Dank Uwe klappt sehr gut
Member: essu2307
essu2307 Jan 14, 2014 at 14:12:11 (UTC)
Goto Top
Danke Chmumann klappt auch gut :D:D