我实际上并不擅长 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 函数中的数组/列表/表?