1

文字列がクエリに入力される OpenOffice でデータベースを使用してクエリを作成しようとしています。文字列のすべての順列がデータベースで検索され、一致が表示されます。私のデータベースには単語とその定義のフィールドがあるため、GOOD を探している場合は、その定義と DOG の定義を取得します。

4

4 に答える 4

2

3 列目も必要です。この列には単語が表示されますが、文字はアルファベット順に並べられています。たとえば、APPLE という単語があり、次の列には AELPP という単語があります。探している単語を並べ替えて、次のような SQL コードを実行します。

WHERE sorted_words = 'my_sorted_word'

単語appleの場合、次のようになります。


unsorted      sorted
AELPP         APPLE
AELPP         PEPLA
AELPP         APPEL 

さて、あなたも欲しがっていました-私が間違っていたら訂正してください。ただし、文字の**任意の組み合わせ**で作成できるすべての単語が必要です。つまり、APPLE は LEAP や PEA などの単語も返します。

これを行うには、いくつかのプログラミング言語を使用する必要があります-たとえば、上記を再帰的に実行する関数を作成する必要があります-AELLPという単語に対して

  • ELLP
  • ALP
  • AELPなど..(毎回、すべての組み合わせで1文字を減算し、次に可能なすべての組み合わせで2文字を減算する..)
于 2009-06-10T11:49:58.127 に答える
0

多分これは助けることができます:

整数の補助数値テーブルがあるとします。

DECLARE @s VARCHAR(5);
SET @s = 'ABCDE';

WITH Subsets AS (
SELECT CAST(SUBSTRING(@s, Number, 1) AS VARCHAR(5)) AS Token,
CAST('.'+CAST(Number AS CHAR(1))+'.' AS VARCHAR(11)) AS Permutation,
CAST(1 AS INT) AS Iteration
FROM dbo.Numbers WHERE Number BETWEEN 1 AND 5
UNION ALL
SELECT CAST(Token+SUBSTRING(@s, Number, 1) AS VARCHAR(5)) AS Token,
CAST(Permutation+CAST(Number AS CHAR(1))+'.' AS VARCHAR(11)) AS
Permutation,
s.Iteration + 1 AS Iteration
FROM Subsets s JOIN dbo.Numbers n ON s.Permutation NOT LIKE
'%.'+CAST(Number AS CHAR(1))+'.%' AND s.Iteration < 5 AND Number
BETWEEN 1 AND 5
--AND s.Iteration = (SELECT MAX(Iteration) FROM Subsets)
)
SELECT * FROM Subsets
WHERE Iteration = 5
ORDER BY Permutation

Token Permutation Iteration
----- ----------- -----------
ABCDE .1.2.3.4.5. 5
ABCED .1.2.3.5.4. 5
ABDCE .1.2.4.3.5. 5
(snip)
EDBCA .5.4.2.3.1. 5
EDCAB .5.4.3.1.2. 5
EDCBA .5.4.3.2.1. 5
(120 row(s) affected)
于 2009-07-01T00:09:42.620 に答える
0

基本的に、単一の SQL ステートメントで順列を簡単に実行することはできません。ただし、別の言語で簡単に実行できます。たとえば、C# で実行する方法は次のとおりです: http://msdn.microsoft.com/en-us/magazine/cc163513.aspx

于 2009-06-10T11:37:40.537 に答える
0

わかりました、すべての状況を処理すると思う修正版。これは MS SQL Server で機能するため、ローカル テーブルと REPLICATE 関数を使用する限り、RDBMS に合わせて調整する必要がある場合があります。これは、@search_string というパラメーターが渡されることを前提としています。また、NVARCHAR の代わりに VARCHAR を使用しているため、拡張文字を使用している場合は必ず変更してください。

私が今考えている最後のポイントは... 文字の重複を許可することです. たとえば、"GOOD" には "D" が 1 つしかない場合でも、"GOOD" は "DODO" を検索します。ただし、元の単語よりも長い単語は検索されません。つまり、「DODO」は見つかりますが、「DODODO」は見つかりません。正確な要件にもよりますが、これが作業の出発点になるかもしれません。

DECLARE @search_table TABLE (search_string VARCHAR(4000))

DECLARE @i INT

SET @i = 1

WHILE (@i <= LEN(@search_string))
BEGIN
     INSERT INTO @search_table (search_string)
     VALUES (REPLICATE('[' + @search_string + ']', @i)

     SET @i = @i + 1
END

SELECT
     word,
     definition
FROM
     My_Words
INNER JOIN @search_table ST ON W.word LIKE ST.search_string

編集前の元のクエリは、ここにあるだけです。

SELECT
     word,
     definition
FROM
     My_Words
WHERE
     word LIKE REPLICATE('[' + @search_string + ']', LEN(@search_string))
于 2009-06-10T14:33:23.303 に答える