[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 メーリングリストの案内