This is a cache of http://dbflute.seasar.org/ja/manual/function/ormapper/outsidesql/select/likesearch.html. It is a snapshot of the page at 2024-11-01T00:32:01.897+0000.
(外だしSQL)LikeSearch | <strong>dbflute</strong>

(外だしSQL)LikeSearch

"外だしSQLの使い方" を既に読んでいることが前提となります。

概要

外だしSQLでLikeSearch条件を使った検索(曖昧検索) をします。dbfluteにおけるLikeSearch条件(曖昧検索)とはどのようなものか?について説明するページがあります。

現場フィット - LikeSearch条件

会話上では、(外だしSQLの)らいくさーち(条件) と表現します。

外だしSQLでの曖昧検索

外だしSQLにおける曖昧検索は、ParameterBean のオプション機能 を利用して実装します。

e.g. 会員名で固定でエスケープ付きの部分一致 (自動判別) @OutsideSql
-- !df:pmb!
-- !!AutoDetect!!
 ...
 where MEMBER_NAME like /*pmb.memberName*/'%foo%'
e.g. 会員名で固定でエスケープ付きの部分一致 (明示的宣言) @OutsideSql
-- !df:pmb!
-- !!String memberName:likeContain!!
 ...
 where MEMBER_NAME like /*pmb.memberName*/'foo'

固定なら別の方法でもできるが...

一致の方向が固定なのであれば、実は ParameterBean のオプション機能を利用しなくても実現はできますが、エスケープ処理が施されないため推奨されません

e.g. オプションなしでの外だしSQLの曖昧検索 @OutsideSql
where MEMBER_NAME like /*pmb.memberName*/'testValue' || '%'

このようにしておくと、文字列連結の演算子とワイルドカードはテスト値として判定されないので、 指定されたパラメータにワイルドカードがくっ付いて前方一致になります。この場合、さらに後ろに escape 構文を付与しても、指定されたパラメータの中にエスケープ文字を埋め込む処理を別途自前でする必要があります。

e.g. escape文字を指定しても埋め込み処理をしなければ無意味 @OutsideSql
where MEMBER_NAME like /*pmb.memberName*/'testValue' || '%' escape '|'

さらに、SQL上ので文字列連結の演算子は、DBMS依存です。演算子が "+" だったり、"||" ではあってもデフォルトでは利用不可になっていたりする可能性があります。