Ich muss Daten aus einer Tabelle in Insert-Anweisungen in SQL konvertieren. Ich habe die meisten regulären Ausdrücke ausgearbeitet, um das Tool zum Suchen und Ersetzen in SSMS zu verwenden, aber ich habe ein Problem, wenn ich versuche, auf das 9. geklammerte Element in meiner endgültigen Ersetzung zu verweisen. HierSQL Find-and-Replace-Regular-Expression-Capture-Gruppenlimit?
ist der ursprüngliche Datensatz:
Blue Doe 12/21/1967 1126 Queens Highway Torrance CA 90802 N 1/1/2012
Und das ist, was ich brauche (bis jetzt):
select 'Blue','Doe','19671221','1126 Queens Highway','Torrance','CA','90802','N','20120101'
Aufgrund der Beschränkungen für die Anzahl der eingeklammerten Elemente erlaubt Ich muss durchlaufen das Ersetzen dreimal. Dies funktioniert möglicherweise in einer gespeicherten Prozedur, wenn ich machen kann, dass dies zuerst als ein POC funktioniert.
Dies ist der erste passende Ausdruck:
^{:w:b:w:b}{:z}/{:z}/{:z:b[0-9A-Za-z:b]+:b:w:b[A-Z]+:b:z:b:w:b}{:z}/{:z}/{:z}
Und die ersetzen: \10\2/0\3/\40\5/0\6/\7
Dies fügt Nullen auf die Monate und Tage, so dass sie mindestens zwei Zeichen lang sein.
Die nächste Übereinstimmung formatiert die Datumsangaben in das für die Abfrage erforderliche Format um (keine Kommentare über die Verwendung eines Datumsfelds. Dies ist eine Clientanforderung für die Datenbank).
Passende Ausdruck:
^{:w:b:w:b}[0-9]*{[0-9]^2}/[0-9]*{[0-9]^2}/{:z}{:b[0-9A-Za-z:b]+:b:w:b[A-Z]+:b:z:b:w:b}[0-9]*{[0-9]^2}/[0-9]*{[0-9]^2}/{:z}
Und die ersetzen: \1\4\(2,2)\(2,3)\5\8\(2,6)\(2,7)
schließlich das Finale fügt die Ergebnisse in die SQL-Anweisung, die in einer INSERT-Anweisung verwendet wird, wird erhalten.
Passende Ausdruck:
^{:w}:b{:w}:b{:z}:b{[0-9A-Za-z:b]+}:b{:w}:b{[A-Z]+}:b{:z}:b{:w}:b{:z}
Und die ersetzen: select '\1','\2','\3','\4','\5','\6','\7','\8','\9'
alles funktioniert mit Ausnahme der letzten Ersatz. Aus irgendeinem Grund erhält das \ 9 NICHT die Daten aus dem Spiel. Wenn ich nur den ganzen Replace-Ausdruck durch \ 9 ersetze, bekomme ich eine Leerstelle. Wenn ich \ 8 benutze, bekomme ich N. Wenn ich den 8. geklammerten Artikel eliminiere, was meinen 9. Artikel achtelt, gibt er zurück, was ich will, 20120101.
Also meine Frage ist, erlaubt SSMS/SQL 9 getaggt Ausdrücke bei der Verwendung von Suchen/Ersetzen und regulären Ausdrücken? Oder verpasse ich hier etwas? Ich weiß, dass es andere Möglichkeiten gibt, dies zu tun. Ich versuche nur, es schnell als POC zu erledigen, bevor wir es in einen Sproc oder eine Anwendung verschieben.
Vielen Dank für Ihre Hilfe. -Peter
Sie können direkt aus einer Tabelle importieren. Sind die Daten bereits in separaten Spalten? – RedFilter
Warum brauchen Sie ersetzen? Wenn die Daten aus einem Tabellenblatt stammen und Sie SSMS verwenden, verwenden Sie den Import/Export-Manager. Warum formatieren Sie die Daten nicht auch, wenn das Tabellenkalkulationsformat keine TT/MM/JJJJ-Datumsformate unterstützt? Konnten Sie nicht einige Zellenformeln schreiben, um eine Zeichenkette zu verketten, die die Daten für Sie einfügt? – Trisped
Bearbeiten Sie Ihre Frage, um die korrekte Formatierung von Codeausdrücken hinzuzufügen. Sie können dies tun, indem sie: mit Backticks Umgebung („'“), die alle auswählen und auf die Schaltfläche' {} ', oder durch einen Code-Block Markierung und Drücken von Strg + K. Sie können eine Vorschau Ihres Beitrags (vor dem Posten) direkt unter der Schaltfläche "Frage absenden" anzeigen, wenn Sie ihn eingeben. Die Vorschau wird in Echtzeit aktualisiert. Es handelt sich also um eine WYSIWYG-Ansicht. Wenn Sie die Formatierung richtig formatieren, wird Ihre Frage leichter zu lesen und zu verstehen. Daher ist es viel wahrscheinlicher, dass Sie eine Antwort erhalten. Vielen Dank. :) –