0

我实际上并不擅长 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)?当然,我可以返回一个整数并使用 0 表示 false 和 1 表示 true 左右,但这应该是可能的

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

4

0 回答 0