基于包含一个或多个其他字符串的字符串的选择
Selection based on string containing one or many other strings
我有一个 table 'forms' 列 'title'。
在我的存储过程中,我创建了一个带有 'searchVals'.
列的临时 table '#temp1'
存储过程解析多个字符串,字符串个数可变
如果 'title' 包含一个或多个 'searchVal',我想要实现的是选择一行。但是我还没有成功实现这个。
例如这样的东西
SELECT title FROM #temp1 WHERE title IN ('%'+(SELECT searchVal FROM #temp1)+'%')
问题显然是 IN 不允许通配符,但如果允许的话,这就是我想要实现的结果类型。
堆叠 OR 也不起作用,因为 #temp1 中的行数是可变的。
谓词和自由文本搜索不起作用,因为表单数据库未正确编制索引。
我提出了我认为有效的解决方案,但我似乎无法正确构建它。该函数将从 WHERE 子句和 return 布尔值调用。很抱歉,如果这个问题在其他地方得到了回答,我确实进行了广泛的搜索。
下面是我提出的伪代码解决方案,我不确定可互换的 SQL 代码。
DECLARE FUNCTION dbo.checkVal(searchVal column, formTitle varchar)
RETURNS boolean
AS
BEGIN
WHILE (not end of column)
IF formTitle LIKE '%'+searchVal+'%'
RETURN true
END
END
RETURN FALSE
END
抱歉,我的 SQL 代码不一致且不正确。如果有任何建议或更正可以使我的代码正常工作,我将不胜感激。也欢迎更好的解决方案。
谢谢。
您可以在 JOIN 语句中使用 LIKE 运算符:
SELECT DISTINCT f.*
FROM forms f
JOIN #temp1 t ON f.title LIKE '%' + t.column + '%'
但请记住,使用 LIKE 运算符确实会影响性能,因此您需要尽可能使用 where 子句 table 来减少表单中的行数
如何通过 EXISTS()
检查每一行表格?
SELECT *
FROM forms f
WHERE EXISTS
(
SELECT *
FROM #temp1
WHERE f.title LIKE '%' + searchVals + '%'
)
我有一个 table 'forms' 列 'title'。 在我的存储过程中,我创建了一个带有 'searchVals'.
列的临时 table '#temp1'存储过程解析多个字符串,字符串个数可变
如果 'title' 包含一个或多个 'searchVal',我想要实现的是选择一行。但是我还没有成功实现这个。
例如这样的东西
SELECT title FROM #temp1 WHERE title IN ('%'+(SELECT searchVal FROM #temp1)+'%')
问题显然是 IN 不允许通配符,但如果允许的话,这就是我想要实现的结果类型。 堆叠 OR 也不起作用,因为 #temp1 中的行数是可变的。 谓词和自由文本搜索不起作用,因为表单数据库未正确编制索引。
我提出了我认为有效的解决方案,但我似乎无法正确构建它。该函数将从 WHERE 子句和 return 布尔值调用。很抱歉,如果这个问题在其他地方得到了回答,我确实进行了广泛的搜索。 下面是我提出的伪代码解决方案,我不确定可互换的 SQL 代码。
DECLARE FUNCTION dbo.checkVal(searchVal column, formTitle varchar)
RETURNS boolean
AS
BEGIN
WHILE (not end of column)
IF formTitle LIKE '%'+searchVal+'%'
RETURN true
END
END
RETURN FALSE
END
抱歉,我的 SQL 代码不一致且不正确。如果有任何建议或更正可以使我的代码正常工作,我将不胜感激。也欢迎更好的解决方案。 谢谢。
您可以在 JOIN 语句中使用 LIKE 运算符:
SELECT DISTINCT f.*
FROM forms f
JOIN #temp1 t ON f.title LIKE '%' + t.column + '%'
但请记住,使用 LIKE 运算符确实会影响性能,因此您需要尽可能使用 where 子句 table 来减少表单中的行数
如何通过 EXISTS()
检查每一行表格?
SELECT *
FROM forms f
WHERE EXISTS
(
SELECT *
FROM #temp1
WHERE f.title LIKE '%' + searchVals + '%'
)