質問: `" and point_ID like "` の `""` は文字列でしょうか? `gQuote(escapeChar(id) + "%")` は `escapeChar` メソッドの引数(id)に `"%"` の文字列をつけているのでしょうか? どういう処理をしているのか教えて頂きたいです。 ``` if(!isEmpty(id)) { query.append(" and point_ID like " + gQuote(escapeChar(id) + "%") + CstDef.DB_STR); } ```
回答: `""`はJavaなど**プログラム言語の**文字列です。 `''`は**SQLの**文字列です。 > > `gQuote(escapeChar(id) + "%")` は `escapeChar` メソッドの引数(id)に `"%"` の文字列をつけているのでしょうか? > > > ご賢察の通りです。 > > どういう処理をしているのか > > > 前提として`%`はlike検索に使用する**ワイルドカード文字**です。 例えば `where PRODUCT_NAME like 'りんご%'` と記述すると PRODUCT_NAME が'りんごパイ'でも'りんごジュース'でもヒットします。 ただし`%`はワイルドカード文字なので `where PRODUCT_NAME like 'りんご100%ジュース'` とすると PRODUCT_NAME が'りんご100%ジュース'以外に'りんご10000個分のジュース'などにもヒットしてしまいます。 `%`を文字列としてlike検索するためには**エスケープ処理**をしなくてはなりません。 データベースによって正解が変わりますが、PostgreSQLならば下記のようになるでしょう。本家SOの関連質問 `like 'りんご100\%ジュース'` または `like 'りんご100^%ジュース' escape '^'` 上記を踏まえて推測になりますが、`escapeChar`メソッドでワイルドカード文字をエスケープした後に末尾にワイルドカード文字を連結し、最後に`gQuote`メソッドでSQLの文字列にするためのシングルクォーテーションをジェネレートして囲う処理をしているのでしょう。 繰り返しこういったことを申し上げるのは差し出がましいのですが... 第三者が質問の要旨を判断できるタイトルの方が回答が付きやすいです。 おそらく内製のメソッドを使用されているのでどういう処理をしているのか回答者は分かりません。 プログラム言語とSQLの境界について混乱されているようですので、ご質問の前に頭の中で整理された方が良いと思います。 プログラムをデバッグ実行することで、query変数の中身のSQL文字列を確認できるはずです。 SQL文字列が確認できたならば、どういう処理をするSQLかを実際にデータベースソフトを使って確認してみましょう。 以前にされたご質問でプログラム言語とSQLの基礎知識は着実に集まっていますので、類似のロジックに応用して解読することでぐっと上達につながります。 チームの先輩に分からない箇所を聞く時も「ほとんど分かりません」ではなく「ここでやっている処理は○○だと思いますが合ってますか?」の方が回答しやすいのではないでしょうか。 上から目線のアドバイスで申し訳ありませんが、ステップアップを応援しています。がんばってくださいね。