我有一个UDF,它接受一个以空格分隔的字符串,并返回一个包含各个字符串行的表。像这样:
SplitTextReturnTable('Emmanuel John Ahmed', ' ')
// returns a table containing three rows having Emmanuel, John and Ahmed.
我想要做的是使用每个返回的字符串在表中执行搜索以检索具有与字符串匹配的数据的行,类似于使用每个返回的字符串搜索表的for-each语句。这是我想要的伪代码。
DECLARE @myArray ARRAY;
SET @myArray = ConvertToArray(SplitTextReturnTable('Emmanuel John Ahmed', ' '))
SELECT * FROM Customers WHERE Customers.Fullname LIKE + '%' + @myArray[0] + '%' or Customers.Fullname LIKE + '%' + @myArray[1] + '%' or Customers.Fullname LIKE + '%' + @myArray[2] + '%'
任何帮助将不胜感激。我还想知道是否有更好的方法可以更有效地执行数据库搜索。
感谢。
答案 0 :(得分:3)
为什么您的split
函数只为此输入返回一行?它似乎根本没有分裂!您可能希望它做的是修复它以返回一个包含3行然后可以加入的表。即
SELECT c.*
FROM Customers c
JOIN dbo.SplitTextReturnTable('Emmanuel John Ahmed', ' ') s
ON c.Fullname LIKE '%' + s.value + '%'
关于问题的第二部分,您可能需要调查全文搜索。带有前导通配符的LIKE
本来就很慢。