スペイン語の単語を含むSQLServer2005のデータテーブルがあります。各単語を続けて保存しました。char配列が与えられた場合、それらの文字を含むすべての単語を検索したいと思います。それらが表示される順序でマザーはありません。たとえば、「avi」は「avion」および「iva」と一致します。出来ますか?ご清聴ありがとうございました。
質問する
1167 次
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で文字列を個々の文字に分割します(ただし、通常は数値テーブルを使用してピボットを実行します)。
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 に答える