我需要将一些数据库数据导出到文本文件中。我的查询如下所示:
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个列,我需要为每个列使用几个不同的标记,我认为必须有更好/更有效的方法。 我看了整个互联网,但无法真正找到解决方案。
答案 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;