Ich habe Daten in SQL Server 2005, die HTML-Tags enthalten, und ich möchte all das entfernen und nur den Text zwischen den Tags belassen. Ideal auch Dinge wie Ersetzen <
mit <
etc.
Gibt es eine einfache Möglichkeit, dies zu tun, oder hat jemand bereits einen Beispiel-T-SQL-Code?
Ich habe nicht die Möglichkeit, erweiterte gespeicherte Prozesse und dergleichen hinzuzufügen, daher würde ich einen reinen t-sql-Ansatz bevorzugen (vorzugsweise einen abwärtskompatiblen mit sql 2000).
Ich möchte die Daten nur mit entferntem HTML abrufen, nicht aktualisieren, daher sollte sie idealerweise als benutzerdefinierte Funktion geschrieben werden, um eine einfache Wiederverwendung zu ermöglichen.
So konvertieren Sie zum Beispiel Folgendes:
<B>Some useful text</B>
<A onclick="return openInfo(this)"
href="http://there.com/3ce984e88d0531bac5349"
target=globalhelp>
<IMG title="Source Description" height=15 alt="Source Description"
src="/ri/new_info.gif" width=15 align=top border=0>
</A>> <b>more text</b></TD></TR>
dazu:
Some useful text > more text
CHAR(13) + CHAR(10)
in zwei der Abschnitte, in denen diese enthalten sind. Subtil genug, dass ich es nicht gefangen habe, bis es die Länge eines kurzen Feldes überschritten hat (interessanterweise und für mich erforderlich, sind alle Ersetzungen kürzer als die ursprüngliche Saite).Abgeleitet von der Antwort von @Goner Doug, wobei einige Dinge aktualisiert wurden:
- Verwenden von REPLACE, wo möglich
- Konvertierung vordefinierter Entitäten wie
é
(ich habe die benötigten ausgewählt :-)- Konvertierung von Listen-Tags
<ul> and <li>
quelle
<
und>
bis zum Ende führen. Ansonsten wurden sie mit den Tags entfernt.Wenn Ihr HTML-Code gut geformt ist, ist dies meiner Meinung nach eine bessere Lösung:
quelle
Hier ist eine aktualisierte Version dieser Funktion, die die RedFilter-Antwort (Pinals Original) mit den LazyCoders-Ergänzungen und den Goodeye-Tippfehlerkorrekturen UND meiner eigenen Ergänzung zur Behandlung von Inline-
<STYLE>
Tags im HTML enthält.quelle
STUFF()
anstelle vonREPLACE()
(welche wäre kürzer IMO)?Dies ist keine komplett neue Lösung, sondern eine Korrektur für die Lösung von afwebservant :
quelle
Versuche dies. Es ist eine modifizierte Version der von RedFilter veröffentlichten ... Diese SQL entfernt alle Tags außer BR, B und P mit allen zugehörigen Attributen:
quelle
Wie wäre es mit XQuery mit einem Einzeiler:
Dies durchläuft alle Elemente und gibt nur den Text () zurück.
Verwenden Sie Folgendes, um zu vermeiden, dass Text zwischen Elementen ohne Leerzeichen verkettet wird:
Und um auf "Wie verwenden Sie dies für eine Spalte:
Stellen Sie für den obigen Code sicher, dass Sie
html_column
vom Datentypxml
sind. Wenn nicht, müssen Sie eine gegossene Version des HTML- Codes unter speichernxml
. Ich würde dies als separate Übung tun, wenn Sie HTML-Daten laden, da SQL einen Fehler auslöst, wenn es fehlerhafte XML-Dateien findet, z. B. nicht übereinstimmende Start- / End-Tags oder ungültige Zeichen.Diese eignen sich hervorragend, wenn Sie Suchphrasen erstellen, HTML entfernen usw. möchten.
Beachten Sie nur, dass dies den Typ xml zurückgibt, also CAST oder COVERT gegebenenfalls in Text umwandeln. Die XML-Version dieses Datentyps ist nutzlos, da es sich nicht um eine wohlgeformte XML-Datei handelt.
quelle
data
mit einer Spalte namenshtml
und möchte alle Werte in dieser Spalte auswählen, aber die HTML-Tags entfernen. Wie könnte ich Ihre Antwort verwenden, um dies zu erreichen?Hier ist eine Version, die keine UDF erfordert und auch dann funktioniert, wenn der HTML-Code Tags enthält, die nicht mit schließenden Tags übereinstimmen.
quelle
Während die Antwort von Arvin Amir einer vollständigen einzeiligen Lösung nahe kommt, können Sie überall vorbeischauen. Er hat einen kleinen Fehler in seiner select-Anweisung (das Ende der Zeile fehlt), und ich wollte die häufigsten Zeichenreferenzen behandeln.
Am Ende habe ich Folgendes gemacht:
Ohne den Zeichenreferenzcode kann dies vereinfacht werden:
quelle
Der Patrick Honorez-Code muss geringfügig geändert werden.
Es werden unvollständige Ergebnisse für HTML zurückgegeben, das
<
oder enthält>
Dies liegt daran, dass der Code unter dem Abschnitt
wird in der Tat das <> zu nichts ersetzen. Die Lösung besteht darin, die folgenden zwei Zeilen am Ende anzuwenden:
quelle