[Seasar-user:13614] Re: [S2JDBC] SimpleWhereでの'_'や'%'のlike検索について

Noritaka Ishizumi [E-MAIL ADDRESS DELETED]
2008年 4月 8日 (火) 01:52:08 JST


石墨です。

08/04/07 に Koichi Kobayashi<[E-MAIL ADDRESS DELETED]> さんは書きました:
>  ちょっと気になるのは,標準 SQL ではエスケープ文字の
>  後ろに記述できる文字が '%' と '_' に制限されているような
>  記述が「SQL: 1999 リレーショナル言語詳解」にあること.
>  Oracle では大丈夫そうですが,他の RDBMS でどうなのか?

SQLの規格書が手元にないので、結論を出すにはもう少し調べて見ないといけないのですが、
OracleやDB2のマニュアルでは、エスケープ文字の後ろには'%'や'_'の
ワイルドカード文字と、エスケープ文字自身のみが記述できると書かれていますね。

DB2ではリンク先のドキュメントの135ページ目あたりに記述があります。
ftp://ftp.software.ibm.com/partnerworld/vic/hardware/pdfs/b4e.pdf

もののついでに、他のRDBMSでもオンラインで調べてみました。
SQL Serverは、ドキュメントを見る限りでは問題なさそうです。
http://msdn2.microsoft.com/ja-jp/library/ms179859.aspx

PostgreSQLも大丈夫そう。
http://www.postgresql.jp/document/pg721doc/user/functions-matching.html

MySQLも大丈夫そう。
http://dev.mysql.com/doc/refman/4.1/ja/string-comparison-functions.html

HSQLDBも大丈夫そう。
http://hsqldb.org/doc/guide/ch09.html

明日、もうちょっと調べてみますが、
dialectが定義されている全てのRDBMSで問題無さそうであれば、
標準として組み込んでいただいても大丈夫かもしれません。

>  それから,like() に関してはワイルドカード込みの
>  検索文字列を引数で指定するため,自動変換を
>  するわけにはいきません.
>
>  like("aaa", "x%y$%z$$", '$')
>
>  のように明示的に指定してもらうしかないかと.

確かにlikeではescapeを明示的に指定しないといけませんね。
これは納得です。

とりあえずは、SQLの規格書がなんとか入手できないか動いてみます。


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