このディレクトリの索引
http://hibari.2ch.net/test/read.cgi/db/1274791771/562
#  検索したい文字列より検索キーワードが多いけどだいたいあってるからHITさせたいみたいなことは可能ですか? 
#  例えば「にしむらひろゆき」という文字列にたいしてLIKEで'%ひろゆき%'はHITしますが、 
#  「2ちゃんねる元管理人にしむらひろゆきさん」というキーワードで 
#  この「にしむらひろゆき」にSQLだけでHITさせることは可能でしょうか? 
# 
# 
%
%  対象文字列の長さが検索文字列と同じであるか、あるいは短い場合。

検索したい文字列より検索キーワードが多いけどだいたいあってるからHITさせる(_検索キーワード,_対象文字列,_検索された文字列より前の文字列,_検索された文字列,_検索された文字列より後の文字列) :-
        sub_atom(_検索キーワード,_開始点,副文字列長,_残り文字列長,_対象文字列),
        sub_atom(_対象文字列,0,_開始点,_,_検索された文字列より前の文字列),
        _残り文字列の開始点 is _開始点 + _副文字列長,
        sub_atom(_対象文字列,_残り文字列の開始点,_残り文字列長,_,_検索された文字列より後の文字列).        
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
%  対象文字列と検索文字列のそれぞれの一部が一致すればよいとする場合。

検索したい文字列より検索キーワードが多いけどだいたいあってるからHITさせる(_検索キーワード,_対象文字列,_検索された文字列より前の文字列,_検索された文字列,_検索された文字列より後の文字列) :-
        最長一致副文字列(_検索キーワード,_対象文字列,_開始点,_副文字列長,_残り文字列長,_副文字列),
        sub_atom(_対象文字列,0,_開始点,_,_検索された文字列より前の文字列),
        _残り文字列の開始点 is _開始点 + _副文字列長,
        sub_atom(_対象文字列,_残り文字列の開始点,_残り文字列長,_,_検索された文字列より後の文字列).

最長一致副文字列(_検索キーワード,_対象文字列,_開始点,_副文字列長,_残り文字列長,_副文字列) :-
        findall([_副文字列長,_残り文字列長,_開始点,_副文字列長,_副文字列],(
                    sub_atom(_対象文字列,_開始点,_副文字列長,_残り文字列長,_副文字列),
                    sub_atom(_検索キーワード,_,_副文字列長,_,_副文字列)),
                L),
        sort(L1,L2),
        reverse(L2,L3),
        append(_,[[_副文字列長,_残り文字列長,_開始点,_副文字列長,_副文字列]|R],L3).