0

スペイン語の単語を含むSQLServer2005のデータテーブルがあります。各単語を続けて保存しました。char配列が与えられた場合、それらの文字を含むすべての単語を検索したいと思います。それらが表示される順序でマザーはありません。たとえば、「avi」は「avion」および「iva」と一致します。出来ますか?ご清聴ありがとうございました。

4

3 に答える 3

2

最も簡単な方法は、分割してピボットしてから結合することです。

したがって、aviは文字テーブルの3行になります。

a
v
i

次に、単語リストに参加しますINNER JOIN ON CHARINDEX(letter, word) > 0

使用するGROUP BY word

HAVING COUNT(*) = (SELECT COUNT(*) FROM letters)

この例では、ここからcteを取得して変更しました。数値テーブルをいじくり回す必要がないように、SQL Server 2005で文字列を個々の文字に分割します(ただし、通常は数値テーブルを使用してピボットを実行します)。

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

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

皆さんの回答に感謝します。最後に、正規表現を評価できるSQLServer内にアセンブリを作成することで問題を解決しました。ベースとして使用される記事は次のとおりです。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%'

これは「大量の」リソースを消費するため、100万行を超える行では使用しないでください(サーバーによって異なります)。

于 2012-04-17T23:39:43.993 に答える