[Seasar-user:13142] Re: [S2JDBC]SQLファイルによる操作でlike文が上手くいかない

Koichi Kobayashi [E-MAIL ADDRESS DELETED]
2008年 3月 4日 (火) 01:00:24 JST


小林 (koichik) です.

Date:    Tue, 4 Mar 2008 00:06:21 +0900
From:    出羽 健一 <[E-MAIL ADDRESS DELETED]>
To:      <[E-MAIL ADDRESS DELETED]>
Subject: [Seasar-user:13141] [S2JDBC]SQLファイルによる操作でlike文が上手くいかない

> コードを実行すると次のようなSQL文が
> 生成されるものと期待していました。
> 
> select * from employee
> where
> name like 'A%'
> 
> しかし、実際に生成されたSQL文は以下のとおりで、
> 期待した結果と異なっていました。
> 
> [getCompleteSqlメソッドによるログ]
> select * from employee
> where
> name like 'A'
> 
> [getRawSqlメソッドによるログ]
> select * from employee
> where
> name like ?

それが仕様です.
SQL ファイルについては S2Dao と同等です (たぶん).
そんなわけで (どんなわけで?),S2Dao のドキュメント

http://s2dao.seasar.org/ja/s2dao.html#SQLBind

の「バインド変数コメント」より.

----------------------------------------------------------------------
LIKEを使用する場合は、次のようにします。

ename LIKE /*ename*/'hoge'

ワイルドカードを使いたい場合は、メソッドの引数の値に埋め込みます。
「"COT"を含む」という条件を指定する場合は、以下のように引数の値に
ワイルドカードを埋め込みます。

employeeDao.findEmployees("%COT%");
----------------------------------------------------------------------


> PS. this.name = "A%"; のようなコードにすると
>   期待通りのSQLが得られるのですが、ひょっとして、
>   これが正しい使い方!?

あるいは SQL ファイルで

select * from employee
where
name like /*name*/'S' || '%'

のようにするかですね.


-- 
<component name="koichik">
    <property name="fullName">"Koichi Kobayashi"</property>
    <property name="email">"[E-MAIL ADDRESS DELETED]"</property>
    <property name="blog">"http://d.hatena.ne.jp/koichik"</property>
</component>



Seasar-user メーリングリストの案内