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