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

藤本悟司 satoshi @ try-square.co.jp
2003年 2月 26日 (水) 13:24:53 JST


藤本です。

oshima さんは書きました:
>こんにちは、大島といいます。
>
>参考になるかどうか分かりませんが、
>
>SELECT *
>FROM tel2addr AS t
>WHERE
>t.tel = substring( '入力された値' ,1,
>          (
>             SELECT MAX(char_length(t1.tel))
>             FROM tel2addr AS t1
>             WHERE '入力された値' ~('^' || t1.tel )
>          )
>        )
>
>でどうでしょうか?

ありがとうございます。
試してみましたが、ほぼ思った通りの結果が出ます。

要するに、
1.入力された電話番号を含むtelの中で最も長い長さを求める
2.その長さぶん、入力された電話番号と一致するtelを持つ
  レコードを取り出す
ということですね。
なんとか理解しましたが、このsubstring()とchar_length()の
組み立てを作るには、今の私ではもう少し修行が足りないなと
痛感しました。

ただ、外側のSELECTで逆に絞りすぎて、妥当な結果の一部も
切り捨てられているようです。

  t.tel = substring( '入力された値' ,1,

の行を、

  t.tel ~ substring( '入力された値' ,1,

に変えれば良いと思いましたが、間違ってたらご指摘ください。
例えば、電話番号"046"を入力した場合、
"046"の"神奈川県厚木市"だけでなく、
"0467"の"神奈川県鎌倉市"もヒットして欲しい、
といったケースです。

この線でもう少し検討してみます。

以上。

>
>> はじめて投稿いたします。
>> 藤本と申します。
>> 
>> PostgreSQL-7.3を利用しています。
>> 
>> SQL初心者で、下記のような問題でつまづいております。
>> どなたか、アドバイス頂けませんか。
>> 
>> やりたいことは、
>>   電話番号の全部または先頭の一部 から、
>>   住所の全部または先頭の一部 を検索する、
>> というものです。
>
><以下略>
>
>

----
藤本 悟司

株式会社トライスクエア
〒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 メーリングリストの案内