tools/sqlitedb GLOB を用いた文字列パターンマッチの例
ここでは,文字列検索に関するいくつかの SQL を示す.
- 文字列の包含
WHERE 句に「属性名 LIKE '%文字列%'」と書く.例えば「WHERE choiki_kanji LIKE '%地割%'」 これは,「属性 choiki_kanji が,文字列 '地割' を含む」という条件での検索になる.% は任意の(0文字以上)文字列とマッチするため
- 簡単なパターンマッチ
「0階」,「1階」,「2階」,「3階」,「4階」,「5階」,「6階」,「7階」,「8階」,「9階」のいずれかという場合は 「[0123456789]階」のように半角の括弧「[]」を使うというデータベース管理システムが多い
SQLite 3の場合には 「choiki_kanji GLOB '*[0123456789地]階*'」のような書き方になる.(書き方はデータベース管理システムによって違う)
(参考Webページ)http://kawa.at.webry.info/200610/article_8.html
「町域名漢字」が特定文字列を含むという条件での検索
- 「町域名漢字」に「地割」を含むもの
SELECT * FROM zips WHERE choiki_kanji LIKE '%地割%';
「町域名漢字」と「町域名カナ」の括弧書きに関する問い合わせ例
- 「町域名漢字」に「(」と「)」(全角カッコ)をこの順で含み,
かつ,「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地]階*';
- 「町域名漢字」に「(」と「)」(全角カッコ)をこの順で含まない,
かつ,「0階」,「1階」,「2階」,「3階」,「4階」,「5階」,「6階」,「7階」,「8階」,「9階」,「地階」のいずれかを含むもの
SELECT * FROM zips WHERE NOT choiki_kanji GLOB '*(*)*' AND choiki_kanji GLOB '*[0123456789地]階*';
- 上記 1. 以外で,「町域名漢字」に「(」と「)」(全角カッコ)をこの順で含むもの>.
(つまり,
「町域名漢字」に「(」と「)」(全角カッコ)をこの順で含むが.
「0階」,「1階」,「2階」,「3階」,「4階」,「5階」,「6階」,「7階」,「8階」,「9階」,「地階」を含まないもの)
SELECT * FROM zips WHERE choiki_kanji GLOB '*(*)*' AND NOT choiki_kanji GLOB '*[0123456789地]階*';
- 「町域名漢字」に「(」(全角カッコ)を含まないが,「町域名カナ」に「(」(半角カッコ)を含むもの.
SELECT * FROM zips WHERE NOT choiki_kanji GLOB '*(*' AND choiki_kana GLOB '*(*';