Mit der Funktionersetzen nur in gewünschtem Spiel
Replace(FieldX,'FindString','ReplaceString') where FieldX = 'ABC'
Adaequat ersetzen, bis es ein zusätzliches Spiel in der Zeichenfolge, die ich will nicht zu ersetzen.
In meinem Fall habe ich ein Adressfeld, das ich als ALL CAPS bekam. Allerdings möchte ich 'PR' auf 'Prairie' ändern, wenn es auftritt, wie:
- 'PR%'
- '% PR'
- % PR%‘
Doch wenn ich tun:
Update TableA
Set Address=Replace(Address,'PR','PRAIRIE')
where Address like '%PR ' or Address like 'PR %' or Address like '% PR '
Dann 'PR PRIMO'
wird 'PRAIRIE PRAIRIEIMP'
dachte ich, obwohl es das Ausmaß meiner Änderungen gegeben umständlich wird ich diese
Update TableA
Set Address=Replace(Address,'PR ','PRAIRIE ')
where Address like like 'PR %'
Update TableA
Set Address=Replace(Address,' PR',' PRAIRIE')
where Address like like '% PR'
Update TableA
Set Address=Replace(Address,' PR ',' PRAIRIE ')
where Address like like '% PR %'
in drei Abfragen lösen könnte Aber das wird mühsam sein (weit mehr Ersatz wieder ich zu tun habe und andere Fragen) und scheint Es könnte immer noch Fehler erzeugen, die ich nicht erwartet habe. Die Ersetzungstabellen sind ebenfalls sehr groß und dies verdreifacht die Verarbeitungszeit.
Hat jemand in einen Weg gerannt, um dies zu lösen, ist ein weniger gewagter Ansatz? Wenn dies ein Regex wäre, könnte ich damit durchkommen, denke ich, aber ich habe herausgefunden, dass Regex einen großen Aufwand für diese Art von Ersatz mit sich bringt und wie gesagt die Tabellen sind groß.
Angesichts der fehlenden tatsächlichen regulären Ausdrücken, haben Sie ein Skript in Betracht gezogen, die Sie haben über die verschiedenen Kombinationen gehen könnte im Auge behalten in einer Schleife? Ich habe diesen Ansatz bereits verwendet und es hat sehr gut funktioniert, wenn Single-Query-Updates nicht praktikabel/möglich sind. Ist eine längere Sub-String möglich? – ray
MySQL hat keine eingebaute Regexp Replace-Funktion, aber Sie können einige UDFs finden, indem Sie dafür googlen. – Barmar
@ray, wenn ich an diesen Punkt komme, verwende ich im Allgemeinen Excel glauben oder nicht und Tabellen, Felder und Term/ersetzen Begriff in Zellen und dann eine String-Funktion mit End; in der äußersten rechten Zelle. Dann kopiere ich einfach nach unten und voila. Ich bin ziemlich resigniert, dies hier zu tun. Ich landete mit etwa 300 kürzeren Suchanfragen, was meinen Kopf schlägt, wenn ich mir einen Workaround ausprobiere. – user3649739