UDF 替换功能 - 无法识别字符串

Posted

技术标签:

【中文标题】UDF 替换功能 - 无法识别字符串【英文标题】:UDF replace function - failing to recognize strings 【发布时间】:2014-11-17 20:08:14 【问题描述】:

我正在尝试通过与 database_tags 中的名称匹配,将在“xml”字段名中找到的名称替换为超链接。

我创建了一个简单的 UDF,但它没有正确执行查询,因为它在 XML 字段名中创建了重复的名称标签。

 ALTER FUNCTION [dbo].[Tags](@XML VARCHAR(MAX))
 RETURNS VARCHAR(MAX)
 AS
 BEGIN

  SELECT  @XML = REPLACE(@XML,[Name],'<a href="<a href="pagename.aspx?tag='+[name]+'">'+[name]+'</a>')
   FROM [dbo].[database_tags]
   where UploadDate >= '2014-09-01'

   RETURN @XML
   END

更新: 我设法将我的函数更新为以下内容,但是该函数仅从 XML 字段名数据中识别一个名称。

 DECLARE @N VARCHAR(MAX) 
 SELECT @N = [Name] FROM [dbo].[database_tags] 
 WHERE @XML LIKE '%'+[Name]+'%' 
 AND UploadDate >= '2014-09-01' 

 IF @N IS NOT NULL 
 BEGIN 
 SELECT  @XML = REPLACE(@XML, 
   @N, 
   '<a href="<a href="pagename.aspx?tag='+@N+'">'+@N+'</a>') 
 END 
 RETURN @XML 
 END 

如果可能,请提供进一步的建议。非常感谢

【问题讨论】:

如果你使用 NVARCAHR insted of VARCHAR 有什么变化吗? 感谢您的回复。我刚刚尝试过,但它仍然输出相同的错误结果,如上所示。如果可能,请进一步提供建议。非常感谢 我认为这是一个 unicode(utf8) 问题。要么使用 N'your input paramters here' 或更改列排序规则或其他东西。我的 unicode 知识充其量是不稳定的,所以这只是一种预感。跨度> 感谢您的建议。 SELECT @XML = REPLACE(@XML,[Name],N'&lt;a href="&lt;a href="pagename.aspx?tag='+[name]+'"&gt;'+[name]+'&lt;/a&gt;'),我尝试了您的建议,但很遗憾地通知您,它仍然输出相同的错误结果。不过谢谢。 您能否提供 database_tags 表的示例数据和预期输出。调查会更容易。 【参考方案1】:

您可以使用光标循环遍历表中的值,并用超链接替换每个名称。但是替换可能会导致不需要的结果。例如,如果配置的名称是单独字符串函数的一部分,则将其替换为超链接。

Create FUNCTION [dbo].[ReplaceTags](@XML VARCHAR(MAX)) 
RETURNS VARCHAR(MAX) 
AS 
BEGIN 

DECLARE @Name VARCHAR(MAX) 
DECLARE CUR CURSOR FAST_FORWARD FOR
SELECT name
FROM database_tags
Where UploadDate >= '2014-09-01'

OPEN CUR
FETCH NEXT FROM CUR INTO @Name
WHILE @@FETCH_STATUS = 0
BEGIN
 IF @Name IS NOT NULL 
 BEGIN 
 SELECT  @XML = REPLACE(@XML, 
   @Name, 
   '<a href="<a href="pagename.aspx?tag='+@Name+'">'+@Name+'</a>') 
 END 
FETCH NEXT FROM CUR INTO @Name
END

CLOSE CUR;
DEALLOCATE CUR;


 RETURN @XML 
 END   

【讨论】:

感谢您的回答。感谢您的帮助,但上述解决方案在我的输入数据 (XML) 上引发了意想不到的结果。我已经更新了我上面的帖子以获取更多详细信息。如果可能,请进一步提供建议。非常感谢 你确定用这个替换原来的函数吗?我得到了给定输入的正确输出。请检查此 SQLFIDDLE (sqlfiddle.com/#!3/d28cb/3)。 嗨,很抱歉回复太晚了。通过在 database_tags 的 select 语句中添加一个 distinct 子句,我设法使上述函数在我的 sql server 数据模型上工作。非常感谢您的帮助和时间。

以上是关于UDF 替换功能 - 无法识别字符串的主要内容,如果未能解决你的问题,请参考以下文章

UDF 在 excel 2010 中不被识别

Laravel - 包无法识别身份验证功能?

电脑图片转文字无法识别怎么回事

Pyspark:从 Struct 中识别 arrayType 列并调用 udf 将数组转换为字符串

小程序图像识别功能暂停说明

Java File Watcher 无法识别文件更改