[pgsql-jp: 29239] Re: 電話番号から住所を検索するSQL

藤本悟司 satoshi @ try-square.co.jp
2003年 2月 26日 (水) 16:11:54 JST


藤本です。

UNO Shintaro さんは書きました:
>
>SELECT * FROM tel2addr
> WHERE tel LIKE '電話番号' || '%'
>UNION
>SELECT * FROM tel2addr
> WHERE tel = (SELECT tel FROM tel2addr AS t
>               WHERE '電話番号' LIKE t.tel || '%'
>               ORDER BY CHAR_LENGTH(t.tel) DESC
>               LIMIT 1 OFFSET 0)
>
>UNIONの前側は入力された電話番号が市外局番より短い場合の検索です。
>つまり藤本さんが上記でおっしゃっているようなケース用です。
>
>UNIONの後側は入力された電話番号が市外局番より長い場合の検索です。
>意味は大島さんからご教示のものと同じです。
>
>この2つの検索結果をUNIONで合わせて検索結果とします。
>

たしかに。
おそらく、これで完璧ですね。

入力された電話番号、データベース上の電話番号ともに、
長さが自由なために、上記のように、どちらが長い場合も考慮して
場合分けする必要がありました。
部分一致を探す関係が、逆転しますものね。

後者のヒットした中で長さが最大のものを取り出すのに、
ORDER BYで長さ順でソートした先頭の1件を取り出すという方法も、
char_length()の使い方として、私にとって目からうろこでした。

他にご意見頂いた方々も、ありがとうございました。

次は、この逆
  住所の全部または先頭の一部 から、
  電話番号の全部または先頭の一部 を検索する
に挑戦してみます(おそらく、ほぼ同様ですが)

----
藤本 悟司

株式会社トライスクエア
〒104-0045 東京都中央区築地3-5-13北村ビル5F
TEL: 03-5148-3345 / FAX: 03-5148-3346
Mobile: 070-6668-4644
E-Mail: satoshi @ try-square.co.jp
WEB: http://www.try-square.co.jp/

Key fingerprint = 95F2 6B3D 0B8C 374A 5E67  CA02 F28F 703A C1A9 8346



pgsql-jp メーリングリストの案内