我在 sql server 2005 中有一个包含西班牙语单词的数据表。我已经将每个单词存储在一行中。给定一个 char 数组,我想找到所有包含这些字符的单词,而不是它们出现的顺序。例如,“avi”应该匹配“avion”和“iva”。可能吗?感谢您的关注。
问问题
1167 次
3 回答
2
最简单的做法是拆分和旋转,然后加入。
所以 avi 在一个字母表中变成了三行:
a
v
i
然后加入单词列表INNER JOIN ON CHARINDEX(letter, word) > 0
利用GROUP BY word
和HAVING COUNT(*) = (SELECT COUNT(*) FROM letters)
在这个例子中,我刚刚从这里挑选并修改了一个 cte在 Sql Server 2005 中将一个字符串拆分为单个字符,以避免不得不用数字表来愚弄(但我通常可能会使用数字表来做我的数据透视)。
DECLARE @t AS TABLE (search varchar(100));
INSERT INTO @t VALUES ('avi');
DECLARE @words AS TABLE (word varchar(100));
INSERT INTO @words VALUES ('avion'), ('iva'), ('name');
with cte as
(
select substring(search, 1, 1) as letter,
stuff(search, 1, 1, '') as search,
1 as RowID
from @t
union all
select substring(search, 1, 1) as letter,
stuff(search, 1, 1, '') as search,
RowID + 1 as RowID
from cte
where len(search) > 0
)
,letters AS (
SELECT DISTINCT letter FROM cte
)
SELECT words.word
FROM letters
INNER JOIN @words AS words
ON CHARINDEX(letter, word) > 0
GROUP BY words.word
HAVING COUNT(*) = (SELECT COUNT(*) FROM letters)
于 2012-04-17T23:25:11.750 回答
1
感谢大家的回答。最后,我通过在 Sql Server 中创建一个能够评估正则表达式的程序集来解决这个问题。这是用作基础的文章:http: //www.codeproject.com/Articles/42764/Regular-Expressions-in-MS-SQL-Server-2005-2008
此致。
于 2012-04-19T10:28:38.727 回答
0
为什么不:
SELECT * FROM words WHERE word LIKE '%a%' AND word LIKE '%v%'AND word LIKE '%i%'
这会消耗“大量”资源,因此您不应在 >1M 行上使用它(取决于您的服务器)。
于 2012-04-17T23:39:43.993 回答