首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在Sql Server中查找任意顺序的字符

在Sql Server中查找任意顺序的字符
EN

Stack Overflow用户
提问于 2012-04-18 06:09:49
回答 3查看 1.1K关注 0票数 0

我在sql server2005中有一个包含西班牙语单词的datatable。我已经将每个单词存储在一行中。给定一个char数组,我希望找到包含这些字符的所有单词,而不是按照它们出现的顺序。例如,"avi“应该与"avion”和"iva“匹配。有可能吗?感谢您的关注。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-04-18 07:25:12

要做的最简单的事情是拆分和旋转,然后连接。

因此,avi变成了letters表中的三行:

代码语言:javascript
运行
复制
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表进行透视)。

https://data.stackexchange.com/stackoverflow/query/67103/http-stackoverflow-com-questions-10199927-find-chars-in-any-order-in-sql-server

代码语言:javascript
运行
复制
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)
票数 2
EN

Stack Overflow用户

发布于 2012-04-19 18:28:39

感谢大家的回答。最后,我在Sql Server中创建了一个能够计算正则表达式的程序集,从而解决了这个问题。下面是用作基础的文章:http://www.codeproject.com/Articles/42764/Regular-Expressions-in-MS-SQL-Server-2005-2008

诚挚的问候。

票数 1
EN

Stack Overflow用户

发布于 2012-04-18 07:39:44

为什么不呢:

代码语言:javascript
运行
复制
SELECT * FROM words WHERE word LIKE '%a%' AND word LIKE '%v%'AND word LIKE '%i%'

这会消耗“大量”资源,所以您不应该在大于1M的行上使用它(取决于您的服务器)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10199927

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档