根据levenshtein距离创建自定义IN函数t-sql

时间:2013-05-13 14:09:20

标签: sql arrays tsql function sql-in

我实际上不擅长SQL中的函数,我更像是一个java / android程序员。但对于一个学校项目,我需要检查一个字符串是否在T-SQL中的某个数组中。 但我正在比较两家不同公司的数据,他们的数据都存在一些缺陷。其中一家公司的数据位于数据库中,另一家来自excel。

这样做的一种方法是使用SQL ofcourse的LIKE函数,但我不太清楚标准是什么。什么是完美的功能,如sql函数IN,但这需要一个完美的匹配......

所以我做的是以下内容:

创建一个提供Levenshtein distance的T-SQL函数,它比较两个字符串并给出Levenshtein距离。

这个功能很好用。

我的下一步是使用以下参数创建一个函数:

  • 输入字符串 - 要检查的字符串
  • levdist int - 给出比赛的最小levenstein距离
    (完美匹配将是0)
  • arr array / table / llist(无法找到逗号分隔的字符串(如 你输入IN函数)被调用 - 在哪里检查

到目前为止我所拥有的是:

    CREATE FUNCTION inArrayWithLevenstheinDist 
(
    -- Add the parameters for the function here
    @stringToCheck varchar,
    @levDist int,
    @arr TABLE ??? 
)
RETURNS Boolean
AS
BEGIN
    -- Declare the return variable here
    DECLARE @Result bool
    SET @Result = FALSE

    -- Add the T-SQL statements to compute the return value here
    DECLARE @intFlag INT
    SET @intFlag = 1
    WHILE (@intFlag <=5)
    BEGIN
    IF [100].dbo.LEVENSTEINDIST(@stringToCheck,arr(@intFlag) < @levDist
    SET @Result = TRUE
    END //end if 


    SET @intFlag = @intFlag + 1
    IF @intFlag = arr.size ??????
    BREAK;
    END //end while
    GO





    -- Return the result of the function
    RETURN @Result

END //end function
GO

这不起作用并产生编译错误。 所以我的两个问题是(我认为我的代码是错的)

  • 如何在函数中返回一个布尔值(我无法找到它:S)? offcourse我可以返回一个整数,并使用0表示false,使用1表示true,但是应该可以

  • 如何在标准T-SQL IN函数中使用数组/列表/表?

0 个答案:

没有答案