SQL Server-批量导出数据没有HTML格式和行空格

时间:2015-10-22 14:51:43

标签: sql sql-server

我需要将一些数据库数据导出到文本文件中。我的查询如下所示:

SELECT Category1, Category2, Category3 
FROM dbo.tbl1
WHERE Category1 = 'JP-4'
AND Category2> 4;

这可以很好地获取数据,但是在表条目中有一些html格式,例如 <p>,</p>,<br>,</br>等。理想情况下,我需要在将数据导出到文本文件时删除它们。我试图用一个简单的替换查询来做到这一点但是没有用。 我也有线分裂的问题,需要删除(\ n \ r)。 任何关于如何做到这一点的建议都会非常感激!

数据格式是这样的:

Category1: JP-4
Category2: 4
Category3:<p>Neque porro quisquam est qui dolorem ipsum quia dolor</p>  <p>amet, consectetur, adipisci velit</p>
Category4:<p>Neque porro quisquam est qui dolorem ipsum quia dolor</p>  

我得到了它:

SELECT REPLACE(REPLACE("Category3",'<p>',''),'</p>','') 
FROM dbo.tbl1
WHERE Category1= 'JP-4'
AND Category2> 4;

但问题是我总共有15个列,我需要为每个列使用几个不同的标记,我认为必须有更好/更有效的方法。 我看了整个互联网,但无法真正找到解决方案。

1 个答案:

答案 0 :(得分:0)

我创建了一个函数,用于去除与此类似的情况下的非字母数字字符。完整的代码是:

CREATE FUNCTION dbo.ufnGENStripNonAlphaNumChars (
    @inputString nvarchar(max)
)

RETURNS nvarchar(max)
AS
BEGIN

DECLARE @keepChars nvarchar(50) = '%[^a-z0-9 ]%' --a-z, 0-9, space

WHILE PatIndex(@keepChars, @inputString) > 0
    BEGIN
       set @inputString = STUFF(@inputString, PatIndex(@keepChars, @inputString), 1, '');
    END


RETURN @inputString;

END;

关键在于您使用patindex函数寻找的内容。我设置@keepChars =&#39;%[^ a-z0-9]%&#39;,这意味着它找到任何不是(胡萝卜 - ^)的字母或数字字符。您应该能够调整传递给patindex的条件以获得所需的结果(请注意,patindex不会执行正则表达式。)

希望这能为您指明方向。

编辑:

经过进一步审核后,这里有一种更贴切地针对HTML代码的方法(另见Best way to strip html tags from a string in sql server?):

DECLARE @Start INT
DECLARE @End INT
DECLARE @Length INT
SET @Start = CHARINDEX('<',@inputString)
SET @End = CHARINDEX('>',@inputString,CHARINDEX('<',@inputString))
SET @Length = (@End - @Start) + 1
WHILE @Start > 0 AND @End > 0 AND @Length > 0
BEGIN
    SET @inputString = STUFF(@inputString,@Start,@Length,'')
    SET @Start = CHARINDEX('<',@inputString)
    SET @End = CHARINDEX('>',@inputString,CHARINDEX('<',@inputString))
    SET @Length = (@End - @Start) + 1
END

RETURN @inputString;