Mam dane w SQL Server 2005, które zawierają tagi HTML i chciałbym to wszystko usunąć, pozostawiając tylko tekst między tagami. Idealnie również zastąpienie rzeczy jak <
z <
itp
Czy istnieje łatwy sposób na zrobienie tego, czy ktoś ma już przykładowy kod t-sql?
Nie mam możliwości dodawania rozszerzonych składowanych procsów i tym podobnych, więc wolałbym czyste podejście t-sql (najlepiej zgodne wstecz z sql 2000).
Chcę tylko pobrać dane z usuniętym kodem HTML, a nie aktualizować go, więc najlepiej byłoby zapisać je jako funkcję zdefiniowaną przez użytkownika, aby ułatwić ponowne wykorzystanie.
Na przykład konwertowanie tego:
<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>
do tego:
Some useful text > more text
CHAR(13) + CHAR(10)
dwóch sekcji, które je zawierają. Wystarczająco subtelny, nie złapałem go, dopóki nie przekroczył długości krótkiego pola (co ciekawe i wymagane dla mnie wszystkie zamienniki są krótsze niż oryginalny ciąg).Pochodzi z odpowiedzi @Goner Doug, z kilkoma aktualizacjami:
- użycie REPLACE tam, gdzie to możliwe
- konwersja predefiniowanych jednostek, takich jak
é
(wybrałem te, których potrzebowałem :-)- konwersja tagów list
<ul> and <li>
źródło
<
i>
na sam koniec. W przeciwnym razie zostały usunięte z tagami.Jeśli twój HTML jest dobrze sformułowany, myślę, że jest to lepsze rozwiązanie:
źródło
Oto zaktualizowana wersja tej funkcji, która zawiera odpowiedź RedFilter (oryginał Pinal) z dodatkami LazyCoders i poprawkami literówek goodeye ORAZ mój własny dodatek do obsługi
<STYLE>
tagów w wierszu wewnątrz HTML.źródło
STUFF()
zamiastREPLACE()
(który byłby bzdury krótszy IMO)?To nie jest kompletne nowe rozwiązanie, ale poprawka do rozwiązania anonimowej :
źródło
Spróbuj tego. Jest to zmodyfikowana wersja tej opublikowanej przez RedFilter ... ten SQL usuwa wszystkie tagi oprócz BR, B i P z towarzyszącymi atrybutami:
źródło
Co powiesz na używanie XQuery z jedną linijką:
To zapętla wszystkie elementy i zwraca tylko tekst ().
Aby uniknąć łączenia tekstu między elementami bez spacji, użyj:
Odpowiadając na pytanie „Jak tego używasz w przypadku kolumny:
W przypadku powyższego kodu upewnij się, że
html_column
jest to typ danychxml
, a jeśli nie, musisz zapisać rzutowaną wersję HTML jakoxml
. Zrobiłbym to jako osobne ćwiczenie podczas ładowania danych HTML, ponieważ SQL wyrzuci błąd, jeśli znajdzie źle sformułowany xml, np. Niedopasowane znaczniki początku / końca, nieprawidłowe znaki.Są doskonałe do tworzenia fraz wyszukiwania, usuwania kodu HTML itp.
Zwróć uwagę, że zwraca to typ xml, więc CAST lub COVERT do tekstu tam, gdzie to konieczne. Wersja XML tego typu danych jest bezużyteczna, ponieważ nie jest to dobrze sformułowany XML.
źródło
data
z kolumną o nazwiehtml
i chcę wybrać wszystkie wartości w tej kolumnie, ale usunąć znaczniki HTML, jak mogę użyć Twojej odpowiedzi, aby to osiągnąć?Oto wersja, która nie wymaga UDF i działa nawet wtedy, gdy kod HTML zawiera tagi bez pasujących tagów zamykających.
źródło
Chociaż odpowiedź Arvina Amira zbliża się do pełnego rozwiązania jednowierszowego, możesz wpaść wszędzie; ma niewielki błąd w instrukcji select (brakuje końca linii), a ja chciałem poradzić sobie z najczęstszymi odwołaniami do znaków.
Skończyło się na tym, że:
Bez kodu odniesienia znaku można to uprościć do tego:
źródło
Kod Patricka Honoreza wymaga niewielkiej zmiany.
Zwraca niepełne wyniki dla html, który zawiera
<
lub>
Dzieje się tak, ponieważ kod poniżej sekcji
w rzeczywistości zamieni <> na nic. Poprawka polega na zastosowaniu dwóch poniższych linii na końcu:
źródło