0

現在、データベースにナレッジベースの記事があり、システムは記事に関連するキーワードをセミコロンで区切ります。

前面フォームには、100 文字に制限されたテキスト ボックスがあります。テキスト ボックス内の単語を調べて、それらの単語とデータベース内のキーワードの照合を開始する SQL クエリを作成するにはどうすればよいですか?

私は基本的に、Google のような検索を作成したいと考えています。

私は現在使用してLIKE '%{token}%'います。しかし、これでは十分ではありません。

4

2 に答える 2

0

私があなたを正しく理解していれば、同様の問題がありました。ストアド関数「split」で解決しました。この関数は、パラメーターを区切り記号で分割し、1 列のテーブルを返します。

これにより、返されたテーブル列を記事のキーワードと結合できます。

これは、コードのもう少し一般的なバージョンです

FUNCTION [dbo].[Split] (@s varchar(512))
RETURNS table
AS
RETURN (
  WITH Pieces(pn, start, stop) AS (
  SELECT 1, 1, dbo.GetNextDelimiter(@s,0)
  UNION ALL
  SELECT pn + 1, stop + 1, dbo.GetNextDelimiter(@s, stop + 1)
  FROM Pieces
  WHERE stop > 0
),
Parts(pn,s,start,[end]) as
(SELECT pn,
  SUBSTRING(@s, start, CASE WHEN (stop > 0) THEN stop-start ELSE 512 END) AS s, start, stop
FROM Pieces)
SELECT pn as PartNumber,s as StringPart,(start - 1) start,([end] - 1) [end] FROM Parts WHERE s != ''
)

デリミタ機能:

FUNCTION [dbo].[GetNextDelimiter](@string nvarchar(max), @startFrom int)
RETURNS int
AS
BEGIN

-- Declare the return variable here
DECLARE @response int

SELECT @response = MIN(delimiterIndex) 
FROM
(SELECT CHARINDEX(' ', @string, @startFrom)
UNION
SELECT CHARINDEX('-', @string, @startFrom)
UNION 
SELECT CHARINDEX('''', @string, @startFrom)) as Delimiters(delimiterIndex) 
WHERE delimiterIndex != 0

IF @response is NULL
    SET @response = 0

RETURN @response

END

これにより、セミコロンだけでなく、任意の種類と数の区切り記号を使用できます。

ここからは簡単です

Select * from Articles WHERE Token in Split(@Input)
于 2013-09-02T16:50:21.650 に答える