「みんな教えて! 選手権!!」開催のお知らせ

うまく表現ができないのですが、
指定した文字列をワイルドカードで検索できる最大の値を検索したいと思っています。
こんなことはSQLを使って効率的に行う方法は無いでしょうか?

例)
M1
M2
P
P2
P22
P23
P233
P2345
と並んでいる表に対し、条件として、P2342と入れた時に、P23の行を検索したい訳です。
(P,P2,P23もP2342に含まれるが、その中で最も大きな値)

select * from mydata where key1 > 'P2342' order by key1 desc
として、逆読みして完全部分一致するレコードが見つかるまで、見つからない場合は、
対象より1文字も合致しないレコードに至るまで、探すしか方法は無いものでしょうか?

A 回答 (2件)

下記のSQLでどうでしょうか。



select top 1 * from mydata where 'P2342' Like key1 & "*" order by key1 desc;

この回答への補足

ちょっと書き直したら、出来ました。

select * from mydata where 'P2342' Like trim(key1)||'%' order by key1 desc
fetch first 1 rows only

SQLってこんなことが出来るんですね。勉強になりました。

どうも有難うございます。

補足日時:2012/10/02 17:24
    • good
    • 0
この回答へのお礼

コメント有難うございます。

使っているsql(DB2/UDB)ではエラーになりますので、
select * from mydata where 'P2342' Like key1||'%' order by key1 desc
fetch first 1 rows only
と置き換えてみましたが、エラーは出ないものの、1件も合致しません。
ちょっと意味が違うんでしょうか?

お礼日時:2012/10/02 17:17

データを%で囲んで(もしくは後方一致のみ?)マッチさせ、文字列長が


最大のものをえらぶとか?

SQLによって文字列の結合はじゃっかん違いがあるので
正式にはSQLを指定しないとぶれる
    • good
    • 0
この回答へのお礼

コメント有難うございます。

貧弱なsql(DB2/UDB)なのでたぶん書けないと思います。

お礼日時:2012/10/02 17:07

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


おすすめ情報