我们有下面的查询,它是用HTML的等价物(&)替换memo字段中的任何&。在编写时,我们没有考虑到字段中可能还有其他也以“&”开头的HTML标记(即-“etc)。因为我们必须确保当单独使用而不是另一个标记的一部分时,所有的&符号都是HTML等价的,所以我们必须跳过那些位于另一个标记的部分的和符号。也就是说,可以以&开头的最短的HTML标记看起来是3个字符,最长的是6个字符,所以&___;到&___的长度...有没有什么想法可以更新where子句,使它不更新任何&,这些&在&之后的4-7个字符中以";“开头?谢谢。
UPDATE STOCKMEM
SET INETFDESC = CAST(
REPLACE(
REPLACE(
CAST(INETFDESC as NVarchar(MAX))
,'&','&')
, '&', ,'&')AS NText)
WHERE INETFDESC LIKE '%&[^amp;]%' 发布于 2017-02-22 15:32:00
可能不是解决这个问题的最好方法,但是...
您可以使用下划线_作为在该位置应该有一些字符的指示符,这在这种情况下可以有效地使其成为字符计数器。这只是一个简单的例子:
SELECT REPLACE('This is &[^amp;] just a test.','&[^amp;]','&')
WHERE 'This is &[^amp;] just a test.' LIKE '%&___;%'这不会返回值,因为WHERE子句中的字符串不包括&后跟三个字符_ _ _,后跟分号。
SELECT REPLACE('This is &[^amp;] just a test.','&[^amp;]','&')
WHERE 'This is &[^amp;] just a test.' LIKE '%&_____;%' 这将返回一个值,因为WHERE子句中的字符串满足LIKE条件:&_ _ _ _ _; (为清楚起见添加了空格)
也许你可以利用这一点?
发布于 2017-03-02 21:05:41
这并不美观,但我认为它能做好工作。这个想法是找到所有不是实体的一部分的和号。在这里,实体被假定为与符号,一个字母,多一些字符,然后是分列。
set nocount on
--drop table #HtmlTest
select CONVERT( nvarchar(255) ,
N'The & & z; HTML & replacement < > é ε test & a; ' ) as test
into #HtmlTest
select test from #HtmlTest
declare @posStart int, @posStart1 int, @posStart2 int, @posEnd int, @isEntity bit
set @posStart = 1
while (@posStart != 0)
begin
select @posStart1 = charindex('&', test, @posStart + 1) from #HtmlTest
select @posStart2
= patindex('%&[a-z]%;%', substring(test, @posStart + 1, 99999))
+ @posStart from #HtmlTest
set @isEntity = IIF(@posStart1 = @posStart2, 1, 0)
select @posEnd = charindex(';', test, @posStart1 + 1) from #HtmlTest
set @posStart = @posStart1
if (@isEntity = 0 and @posStart1 > 0)
begin
update #HtmlTest
set test = SUBSTRING(test, 1, @posStart1 - 1) + '&'
+ SUBSTRING(test, @posStart1 + 1, 999999)
select test from #HtmlTest
set @posStart += 4
end
end
select test from #HtmlTest
set nocount off发布于 2018-03-05 05:54:46
我认为这将完成这项工作:
UPDATE STOCKMEM
SET INETFDESC = CAST(
REPLACE(
CAST(INETFDESC as NVarchar(MAX)), '& ', '& ')
) AS NText
)如果&是任何标记的一部分,那么它后面不会跟空格,所以请将后面跟着空格的每个&替换为后面跟着空格的&。
https://stackoverflow.com/questions/42382807
复制相似问题