文字列内の数値を検索に使う場合の手法こんにちはゲストさん。検索の仕方で質問があります。WinXPでの開発です。データベースはOracle、開発ソフトはC++Builder5です。以下のようなテーブルとデータがあります。TB2,TB3のidは必ずTB1に存在します。TB3のdataには、カンマ区切りの文字列が入っています。dataのカンマ区切りの内容は"コード,サイズ1,サイズ2"となっています。実際はこのような単純なデータではないので、カラム分けするのは設計時に難しかったようです。bbb,0.3,0.4------------------------------たとえばTB2.keynoが100であり、TB3.dataのサイズ1が0.1のデータのTB1.nameを取りだすという場合、どのようなSQL文になるのでしょうか?TB3のデータは読み込んだ後に一旦文字列を分解してコード、サイズ1、サイズ2を取得しないことには検索出来ないと思います。高速な手法はどうなるでしょうか?トリガーを使って、作業用のテーブル作ってやればいい、みたいなことを言われたのですが、トリガーは違うのでは?と思いながら手法を悩んでいます。ローカルデータベースのようなファイルを使ってやる方法になるのでしょうか?アドバイスをお願いします。'%,0.1,%'でどうでしょうか。アドバイスありがとうございます!こんなにすっきり書けるのですね。回答(3)ANo.3Siegruneまず、>トリガーを使って、作業用のテーブル作ってやればいい、>みたいなことを言われたのですが、は、TB4を作る。0.4TB3のInsert/Update/Deleteトリガーを作って、TB4を更新するって趣旨でしょうね。>ORA-01722:数値が無効です。防ぎたいなら、CAST(の後にNVLを入れるだけで対応はできます。DECIMAL(2,1))といった感じですね。(Nullなら0に置き換える処理です。ま、その前に、ANo1/2をみていて、要件を小出しにするのはやめましょう~。言いたいところですが。TB3.id=TB1.idという検索条件でいいのかな?もしそうなら、TB1とTB3に分けている理由が良く分からない。TB1の中にDATAを作ればしまいのように思えるため。(ま、あえて分ける理由が思いつかないわけではないのですが。sample1に対して、TB3の複数のレコードが対応するんじゃないのかな?という疑問。aaa,0.1,0.2,aab,0.3,0.5,aac,0.6,0.9とか複数あるのでは?と疑問に思ってしまいます。いうならそれでいいけど、要求事項の小出しはやめてくださいね。Oracleに新たなテーブルを追加するのではなく、C++Builder上でというニュアンスでした。そのため、検索するタイミングでトリガーという意味が分かりませんでした。これは指示の間違いだったのかもしれません。防ぎたいなら、CAST(の後にNVLを入れるだけで対応はできます。ま、その前に、ANo1/2をみていて、要件を小出しにするのはやめましょう~。言いたいところですが。実際にはテーブルの内容もテーブル数も膨大でサンプル用の記述がよくなかったです。これからこうならないよう注意します。ありがとうございます。(2)idって検索条件につかっていいの?完全に私の質問用に作成した仮テーブルの内容が悪いせいでご迷惑おかけしました。テーブルを分ける理由などは正直昔から存在しているデータベースで誰が設計したのかもわからない状態です。何かを増やすたびに、よく分からないものになった可能性もあります。いう形で1個しかないの?はい、これは必ず1個と決まっています。アドバイス戴きありがとうございました。お手数おかけした上に、色々と不可解な内容となったことをお詫びいたします。10:02:11お礼ありがとうございます。目的を達成出来そうです!ただ、TB3.dataに数値の入っていないもの(カンマだけ)があり、ORA-01722:数値が無効です。書式をすでにあるコーディングに合わせると、以下のようになってしまっています。最大値);このとき、TB3.dataにカンマだけのデータが存在するとエラーとなっている気がします。くだらない質問で申し訳ありませんが宜しくお願いします。オラクル初心者です教えてください。バージョンが関係あるのかは分かりませんが、8.1.7です。お世話になっております。再度、質問させていただきます。varchar(90)にする予定です。Reserved.掲載情報の著作権は提供元企業等に帰属します。