[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 メーリングリストの案内