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 '*(*';