我在sql server2005中有一个包含西班牙语单词的datatable。我已经将每个单词存储在一行中。给定一个char数组,我希望找到包含这些字符的所有单词,而不是按照它们出现的顺序。例如,"avi“应该与"avion”和"iva“匹配。有可能吗?感谢您的关注。
发布于 2012-04-18 07:25:12
要做的最简单的事情是拆分和旋转,然后连接。
因此,avi变成了letters表中的三行:
a
v
i然后使用INNER JOIN ON CHARINDEX(letter, word) > 0加入单词列表
使用GROUP BY word
使用HAVING COUNT(*) = (SELECT COUNT(*) FROM letters)
在本例中,我只是从这里选取并修改了一个cte Split a string into individual characters in Sql Server 2005,以避免与numbers表打交道(但通常我可能会使用numbers表进行透视)。
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)https://stackoverflow.com/questions/10199927
复制相似问题