サポート > リポジトリ > 検索制御 > [応用] 入力フィルタを使わずに全角半角文字が混在した文字列を検索する

入力フィルタを使わずに全角半角のアルファベットや数字が混在した文字列項目について、検索時に全角半角、英字大文字小文字の区別なく検索できるようにする方法を説明します。

Wagby は標準で「入力フィルタ」という機能を提供しています。この機能を用いると文字列型の項目はデータベースに保存されるときに全角文字が半角文字に自動的に置換されます。

しかしここでは入力フィルタ機能を使わず、全角半角文字が混在した文字列項目を想定します。 このような状態で、例えば「JasmineSoft」(全角文字かつ大文字小文字が混在)で登録された項目に対して、検索文字列「jasminesoft」(半角文字かつすべて小文字)で検索できるようにします。

ここでは「会社名称」項目を例に説明します。会社名「JasmineSoft」と登録します。全角文字です。

図1 顧客詳細表示画面

半角文字で検索してもヒットします。

図2 半角文字での検索

大文字小文字の違いがあってもヒットします。

図3 すべて小文字での検索

すべて大文字でもヒットします。

図4 すべて大文字での検索

途中の空白も無視して検索します。

図5 途中の空白も無視する

定義のポイントは「会社名称」を2項目用意することです。「companyname」は通常の入力及び一覧表示用です。もう一方の「companyname2」は入力画面では隠し項目にし、検索条件用として使用します。

図6 モデル項目一覧
図7 companyname項目とcompanyname2項目の関係性

入力フィルタの設定

「companyname」「companyname2」とも、入力フィルタは「文字列(最小限)」としています。これによって全角で入力された文字列はそのままデータベースに格納されます。

図8 入力フィルタを文字列(最小限)にする (1)
図9 入力フィルタを文字列(最小限)にする (2)

以降の設定は、すべて「companyname2」項目に対して行います。

計算式とデータベース保存の設定

次のように式を設定します。

ASC(
  LOWER(
    SUBSTITUTE(
      SUBSTITUTE(${companyname}," ",""),
      " ",""
    )
  )
)
図10 計算式の設定

ASC 関数は全角文字を半角文字に変換します。 LOWER 関数はアルファベットを小文字に変換します。 最初の SUBSTITUTE 関数は半角空白を空文字に置換します。 もう一つの SUBSTITUTE 関数は全角空白を空文字に置換します。

また、この companyname2 項目で検索を行うため、データベースに保存します。

隠し項目にする

入力制御で、隠し項目とします。

図11 入力時に隠し項目とする

同じく出力制御でも、隠し項目とします。

図12 出力時に隠し項目とする

CSV出力を行わないようにします。この設定で、CSVダウンロード機能を用いた場合でも、この項目は含まれないようになります。

図13 CSV出力を行わない

検索条件の設定

検索の初期値として、検索画面で入力された文字(検索条件文字列)を正規化します。データベースに格納された文字列も同じように正規化されているため、必ずヒットするようになります。

ASC(
  LOWER(
    SUBSTITUTE(
      SUBSTITUTE(${companyname2}," ",""),
      " ",""
    )
  )
)
図14 検索時の「初期値」の設定