sql >> データベース >  >> RDS >> Mysql

MySQL番地あいまい検索

    完全ではなく、かなり遅くなる可能性がありますが、REGEXP()を介して正規表現を使用することをお勧めします。

    これは、ほとんどの場合(およびあなたの例)に一致する最初のパスの正規表現です:

    (?isx)                  # search across multiple lines and ignore case
    (                       # full match
      (                       # st number - what about number words like one or two?
        \d+
      )
      \s+                     # whitespace
      (                       # street name (one or more words)
        [a-z]+
        (?:
          \s+
          [a-z]+
        )*
      )
      \s+                     # whitespace
      (                       # street type
        al(?:y\.?|ley)          # aly, aly. or alley
      |
        ave(?:\.|nue)?          # ave, ave., or avenue
      |
        b(?lvd\.?|oulevard)     # blvd, blvd. or boulevard
      |
        c(?:t\.?|ourt)          # ct, ct. or court
      |
        cir(?:\c\.?|cle)?       # cir, circ, circ. or circle
      |
        cres(?:\.|cent)?        # cres, cres. or crescent
      |
        dr(?:\.|ive)?           # dr, dr. or drive
      |
        exp(?:y\.?|ressway)     # expy, expy. or expressway
      |
        f(?:wy\.?|reeway)       # fwy, fwy. or freeway
      |
        g(?:rdns\.?|ardens)     # grdns, grdns. or gardens
      |
        h(?:wy\.?|ighway)       # hwy, hwy. or highway
      |
        l(?n\.?|ane)            # ln, ln. or land
      |
        m(?:nr\.?|anor)         # mnr, mnr. or manor
      |
        m(?:trwy\.?|otorway)    # mtrwy, wtrwy. or motorway
      |
        pl(?:\.|ace)?           # pl, pl. or place
      |
        r(?:d\.?|oad)           # rd, rd. or road
      |
        st(?:\.|reet)?          # st, st. or street
      |
        t(?:pk\.?|urnpike)      # tpk, tpk. or turnpike
      |
        ter(?:\r?\.?|race)      # ter, ter., terr, terr. or terrace
      |
        tr(?:l.\?|ail)          # trl, trl. or trail
      |
        pike|park|walk|loop|bay|close|gate|highlands
      |
        row|way|oval|dell|rise|vale|byway|lawn
      )
      \,?                     # optional comma
      \s+                     # whitespace
      (                       # optional number, unit, apt or floor
        (
          \#                    # number
        |
          unit                  # unit
        |
          num(?:\.|ber)         # num, num. or number
        |
          ap(?:t\.?|artment)    # apt, apt. or apartment
        |
          fl(?:\.|oor)?         # fl, fl. or floor
        )
        \s+
        \d+
      )?
    )
    

    どちらが返されますか:

    $1-完全一致

    $2-家番号

    $3-通りの名前

    $4-ストリートタイプ

    $ 5-ユニットまたは適切な番号(オプション)

    これをmysqlで使用するには、すべてのコメント('#'からeolまで)を削除し、最初の行を削除し(オプションを切り替え)、空白なしですべてを1行に折りたたむ必要があります。



    1. Mysqlクエリのパフォーマンス。どれが一番いいですか?

    2. DjangoでのMySQLの使用-ユーザー'@'localhostのアクセスが拒否されました

    3. MariaDBの日付から短い日の名前を取得する方法

    4. EasysoftOracle®ドライバーのSOA環境への導入