クエリに文字列が入力され、文字列のすべての順列がデータベース内で検索され、一致が表示されるOpenOfficeのdbを使用してクエリを作成しようとしています。私のデータベースには単語とその定義のフィールドがあるので、GOODを探していればその定義とDOGの定義を取得します。SQLクエリ - 文字列の順列
答えて
基本的に、単一のSQL文で順列を簡単に行うことはできません。しかし、他の言語でも簡単に行うことができます。たとえば、C#で行う方法です。http://msdn.microsoft.com/en-us/magazine/cc163513.aspx
3番目の列も必要です。この列には単語がありますが、アルファベット順にソートされています。たとえば、APPLEという単語があり、次の列にはAELPPという単語があります。 あなたがあなたの探している単語を並べ替えるだろう - あなたはこのようなものになるだろう、
ワードリンゴのためのWHERE sorted_words = 'my_sorted_word'
のようないくつかのSQLコードをして実行します。今
unsorted sorted
AELPP APPLE
AELPP PEPLA
AELPP APPEL
を、あなたも欲しかったです - 私が間違っている場合は私を修正しますが、**あなたはLEAPとPEAのような単語を返すという意味で、**の文字の組み合わせ**で作ることができるすべての単語が欲しいです。
これを行うには、いくつかのプログラミング言語を使用する必要があります - あなたは
- ELLP
- ALLPを持ってAELLP単語を - あなたは、たとえば、上記の再帰的に予め形成された関数を記述する必要があります
- AELP等..(各時間毎の組み合わせで一文字を減算し、.. ECT可能なすべての組み合わせで、2つの文字)
O k、私はすべての状況を処理すると思う修正版。これはMS SQL Serverで動作するので、ローカルテーブルとREPLICATE関数を使用する限り、RDBMSの調整が必要な場合があります。これは@search_stringという渡されたパラメータを前提としています。また、NVARCHARではなくVARCHARを使用しているので、拡張文字を使用している場合は、必ずそれを変更してください。
私が今考えている最後の1つの点は...文字の重複を許します。たとえば、「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))
あなたは整数と補助番号のテーブルがあるとします。
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)
- 1. SQLクエリ文字列
- 2. SQLクエリのエラー文字列
- 3. SQLクエリの文字列への配列
- 4. SQL - クエリ文字列リクエスト
- 5. 追加クエリ文字列クエリ文字列
- 6. SQLでのJSON文字列のクエリ
- 7. SQLコマンドでのクエリ文字列C#
- 8. sqlクエリのbase64サブ文字列
- 9. SQL Serverの文字列操作クエリ
- 10. 文字列の順列と特定の文字列の位置
- 11. クエリでSQL文字列を追加
- 12. perl内の文字列の文字順
- 13. クエリ文字列
- 14. クエリ文字列
- 15. クエリ文字列
- 16. クエリ文字列
- 17. 文字列のクエリ
- 18. 文字列の逆順
- 19. 順序「の文字列を...」
- 20. java逆順の文字列
- 21. 配列内の文字の順列
- 22. PHPの文字列の順列
- 23. 文字列 "1,5,3,7"を基にしたSQLクエリ - >結果の順序を保つ
- 24. struts文字列配列の順序
- 25. SQL - 文字列
- 26. SQL Server:動的クエリと文字列区切り文字
- 27. コピー文字列手順アセンブリ
- 28. ElasticSearchクエリ文字列クエリdefault_operator
- 29. preparedクエリ文字列
- 30. クエリ文字列ハンドラーページ