0

ドキュメントのタイトル内で複数のキーワードを検索するための次のコードがあり、正常に動作します。各タイトル行で見つかったキーワードの数を示す列を作成し、降順に並べたいと思います。たとえば、「出産休暇」を検索している場合は、次のようになります。

名前 -- 見つかったキーワード

産休制度 -- 2

年次有給休暇制度 -- 1

出産を控えた方へのマタニティアドバイス -- 1

それが理にかなっていることを願っています、どうもありがとう!

    Dim s As String = TextBox1.Text

    Dim SqlQuery As String = "SELECT Doc_LibraryTable.DocID, Doc_LibraryTable.DocName, Doc_LibraryTable.DocType WHERE Doc_LibraryTable.DocType = DocType"

    Dim ints As String() = s.Split(" ")
    Dim i As Integer 

    If UBound(ints) >= 1 Then
        SqlQuery += " AND (Doc_LibraryTable.DocName LIKE '%" + ints(0) + "%'"       

        For i = 1 To UBound(ints)
            If Not ints(i) = "of" And Not ints(i) = "the" And Not ints(i) = "in" And Not ints(i) = "or" Then
                SqlQuery += " OR Doc_LibraryTable.DocName LIKE '%"
                SqlQuery += ints(i) + "%'"
            End If
        Next



    ElseIf UBound(ints) < 1 Then
       For i = 0 To UBound(ints)
            SqlQuery += " AND (Doc_LibraryTable.DocName LIKE '%"
            SqlQuery += ints(i) + "%"
        Next

   End If

     If UBound(ints) >= 1 Then
        SqlQuery += ")"
    ElseIf UBound(ints) < 1 Then
        SqlQuery += "')"
    End If

    SqlDataSource2.SelectCommand = SqlQuery
    GridView1.DataSource = SqlDataSource2
4

2 に答える 2

0

少し厄介な別の方法は、次のようなことをすることです

select ...   
 , len(replace([DocName],'Maternity leave','Maternity leave' + '*')) - len([DocName])
  As NameHits

私はこれをテストするために次のコードを使用しました:-

set nocount on;
declare @t as table([name] varchar(10))
insert into @t values ('a bb c')
insert into @t values ('aa bc c')

declare @find varchar(5)
set @find = 'bc'

select
    *, 
    len(replace([name],@find,@find + '*')) - len(name)

from @t
于 2009-09-10T14:58:56.890 に答える
0

これは、ループ内で SELECT 句を変更し、CASE ステートメントを使用して行うことができます。

Dim SqlQuery As String = "SELECT Doc_LibraryTable.DocID, Doc_LibraryTable.DocName, Doc_LibraryTable.DocType, "
Dim sep as String = ""
For i = 0 To UBound(ints)
    SqlQuery += sep + "CASE WHEN Doc_LibraryTable.DocName LIKE '%" + ints(i) + "%' THEN 1 ELSE 0 END"
    sep = " + "
Next
SqlQuery += " as MatchCount WHERE Doc_LibraryTable.DocType = DocType"
于 2009-09-10T14:39:02.200 に答える