Replace Funktion MySQL - Pfad ohne Dateiname

dinoldo

Cadet 4th Year
Registriert
Juni 2017
Beiträge
104
Hallo Leute,

ich habe eine MySQL Abfrage, welche grundsätzlich funktioniert.

Als Ergebnis bekomme ich unter "Pfad" beispielsweise dies:

P:\Company\XYZ\Projekte\Familienhaus A\Pläne\dwg\Grundriss EG.dwg
SELECT p.id, p.group_name, f.name, p.plan_path AS Pfad
FROM p_files f
LEFT JOIN p_file_plans fp ON f.id=fp.file_id
LEFT JOIN p_plans p ON p.id = fp.plan_id
WHERE path LIKE '%PeiWuoSvfOrVexwAPFr4f57YskIHDfScZwbKq9eB.pdf'


Wie bekomme ich den Pfad ohne Dateiname und das Verzeichnis \dwg\ soll \pdf\ ersetzt werden.

Gewünschtes Ergebnis für "Pfad": P:\Company\XYZ\Projekte\Familienhaus A\Pläne\pdf\

Beste Grüße,
Dino
 
Komme aus der roten DB-Welt

Grundidee KISS, keine REGEXP-Kram

.. die Dateiname ist der String nach dem ersten \ von hinten dem letzten \ von vorn

... dessen Position mit INSTR rausbekommen und für SUBSTR passend einsetzen zum Splitten (zB SUBSTR) - der Resst ist REPLACE(,'\anne\','\berta\') wenn ich mal annehme der \dwg\ nicht mehrfach im Pfad vorkommt

https://dbfiddle.uk/Udei6oyi

SQL:
select
substr(pfad,pos_last_backspace+1) dateiname -- alles bis zum (inkl)letzten Backspace schneiden
, replace(substr(pfad,1,pos_last_backspace),'\dwg\','\pdf\') teilpfad -- alle nach dem letzten backspace
          from
(select pfad, instr(pfad,'\',-1,1) pos_last_backspace -- hier von hinten den ersten backspace finden
          from (select 'P:\Company\XYZ\Projekte\Familienhaus A\Pläne\dwg\Grundriss EG.dwg' pfad from dual) -- einfach Rohdaten erzeugen als String
         )
 
Zuletzt bearbeitet: (+SQL)
  • Gefällt mir
Reaktionen: tollertyp
Im Worst Case, wenn es einmalig ist, würde ich die Werte exportieren und mir ein Update-Script schreiben mit den neuen Werten. Geht natürlich nur, wenn man weiß, dass die Werte erst mal "stabil" sind.

Um einen Export vorher kommst du aber m.M.n. eh nicht drum rum, um im Zweifel nachvollziehen zu können, was passiert ist.
 
Zurück
Oben