SQL Server 2005 に HTML タグを含むデータがあり、それをすべて削除して、タグ間のテキストだけを残したいと思っています。理想的には、などの項目も など<
に置き換えます。<
これを行う簡単な方法はありますか? または、すでにサンプルの T-SQL コードを持っている人はいますか?
拡張ストアド プロシージャなどを追加する機能がないため、純粋な T-SQL アプローチ (できれば SQL 2000 と下位互換性のあるもの) を希望します。
私はデータを更新するのではなく、削除された HTML でデータを取得するだけなので、再利用しやすいようにユーザー定義関数として記述するのが理想的です。
たとえば、これを変換すると次のようになります。
<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>
これに:
Some useful text > more text
ベストアンサー1
ここで説明するように、それを実行する UDF があります。
CREATE FUNCTION [dbo].[udf_StripHTML] (@HTMLText VARCHAR(MAX))
RETURNS VARCHAR(MAX) AS
BEGIN
DECLARE @Start INT
DECLARE @End INT
DECLARE @Length INT
SET @Start = CHARINDEX('<',@HTMLText)
SET @End = CHARINDEX('>',@HTMLText,CHARINDEX('<',@HTMLText))
SET @Length = (@End - @Start) + 1
WHILE @Start > 0 AND @End > 0 AND @Length > 0
BEGIN
SET @HTMLText = STUFF(@HTMLText,@Start,@Length,'')
SET @Start = CHARINDEX('<',@HTMLText)
SET @End = CHARINDEX('>',@HTMLText,CHARINDEX('<',@HTMLText))
SET @Length = (@End - @Start) + 1
END
RETURN LTRIM(RTRIM(@HTMLText))
END
GO
編集: これは SQL Server 2005 用ですが、キーワード MAX を 4000 などに変更すると、SQL Server 2000 でも機能します。