tools/sqlitedb GLOB を用いた文字列パターンマッチの例

ここでは,文字列検索に関するいくつかのSQLを示す.文字列検索は,データベースにおける重要な操作の一つである.

(参考Webページ)http://kawa.at.webry.info/200610/article_8.html

「町域名漢字」が特定文字列を含むという条件での検索

  1. 「町域名漢字」に「地割」を含むもの
    SELECT * FROM zips WHERE choiki_kanji LIKE '%地割%';
    

「町域名漢字」と「町域名カナ」の括弧書きに関する問い合わせ例

  1. 「町域名漢字」に「(」と「)」(全角カッコ)をこの順で含み,かつ,「0階」,「1階」,「2階」,「3階」,「4階」,「5階」,「6階」,「7階」,「8階」,「9階」,「地階」のいずれかを含むもの

    * パターンマッチの演算子は,データベース管理システムによって異なる.例えば,PostgreSQLの場合には「GLOB」を「~」に置き換えることで,同様の動作を実現できる可能性がある(未確認).ここではSQLite 3での実装について説明する.

    SELECT * FROM zips WHERE choiki_kanji GLOB '*(*)*' AND choiki_kanji GLOB '*[0123456789地]階*';
    
  2. 「町域名漢字」に「(」と「)」(全角カッコ)をこの順で含まない,かつ,「0階」,「1階」,「2階」,「3階」,「4階」,「5階」,「6階」,「7階」,「8階」,「9階」,「地階」のいずれかを含むもの
    SELECT * FROM zips WHERE NOT choiki_kanji GLOB '*(*)*' AND choiki_kanji GLOB '*[0123456789地]階*';
    
  3. 上記 1. 以外で,「町域名漢字」に「(」と「)」(全角カッコ)をこの順で含むもの.(すなわち,「町域名漢字」に「(」と「)」(全角カッコ)をこの順で含むが,「0階」,「1階」,「2階」,「3階」,「4階」,「5階」,「6階」,「7階」,「8階」,「9階」,「地階」を含まないもの)
    SELECT * FROM zips WHERE choiki_kanji GLOB '*(*)*' AND NOT choiki_kanji GLOB '*[0123456789地]階*';
    
  4. 「町域名漢字」に「(」(全角カッコ)を含まないが,「町域名カナ」に「(」(半角カッコ)を含むもの
    SELECT * FROM zips WHERE NOT choiki_kanji GLOB '*(*' AND choiki_kana GLOB '*(*';