複数条件の絞込み
- このフォーラムに新しいトピックを立てることはできません
- このフォーラムではゲスト投稿が禁止されています
yamazawakt
居住地: 山形県
投稿数: 228
![長老 長老](../../uploads/rank3dbf8eb1a72e7.gif)
お世話になります。
複数の条件で1つの項目の絞込み(範囲)機能を作成中ですが
うまく動いてくれません。
例えば、
1233
1122
1234
1100
上記のようなデータがあり、各変数でとった枠に
条件1:「1」 条件2:「4」
と指定した場合「1234」のレコードが表示されるようにしたいのです。
INSTR関数を使用してみましたが単独ですと問題ありませんが
複数(条件1AND条件2)ですとデータが表示してくれません。
何か良い方法をご存じの方いらっしゃいましたらすみませんがご教授の頂けますと大変助かります。
宜しくお願い致します。
複数の条件で1つの項目の絞込み(範囲)機能を作成中ですが
うまく動いてくれません。
例えば、
1233
1122
1234
1100
上記のようなデータがあり、各変数でとった枠に
条件1:「1」 条件2:「4」
と指定した場合「1234」のレコードが表示されるようにしたいのです。
INSTR関数を使用してみましたが単独ですと問題ありませんが
複数(条件1AND条件2)ですとデータが表示してくれません。
何か良い方法をご存じの方いらっしゃいましたらすみませんがご教授の頂けますと大変助かります。
宜しくお願い致します。
投票数:0
平均点:0.00
nkmt
投稿数: 1668
![長老 長老](../../uploads/rank3dbf8eb1a72e7.gif)
タスク環境 → 範囲/位置付
式
INSTR(項目,'1')>=1 AND INSTR(項目,'4')>=1
では駄目なのでしょうか?
式
INSTR(項目,'1')>=1 AND INSTR(項目,'4')>=1
では駄目なのでしょうか?
投票数:0
平均点:0.00
yamazawakt
居住地: 山形県
投稿数: 228
![長老 長老](../../uploads/rank3dbf8eb1a72e7.gif)
nkmtさん
いつもご回答頂き大変有難う御座います!
おっしゃるとおりの内容でいけると思ってたのですが。。。
データが1件も表示されない状態になります。
他に何か手がありますでしょうか。
テーブルの形式自体を変えるとか。。。。
いつもご回答頂き大変有難う御座います!
おっしゃるとおりの内容でいけると思ってたのですが。。。
データが1件も表示されない状態になります。
他に何か手がありますでしょうか。
テーブルの形式自体を変えるとか。。。。
投票数:0
平均点:0.00
Tanda
投稿数: 2151
![長老 長老](../../uploads/rank3dbf8eb1a72e7.gif)
nkmtさんの式で、ちゃんと動きますよ。
もう少し簡略化するなら、INSTR(項目,'1')>0 AND INSTR(項目,'4')>0 ですけど。
もう少し簡略化するなら、INSTR(項目,'1')>0 AND INSTR(項目,'4')>0 ですけど。
投票数:0
平均点:0.00
yamazawakt
居住地: 山形県
投稿数: 228
![長老 長老](../../uploads/rank3dbf8eb1a72e7.gif)
Tandaさん
いつも有難うございます!
直接'1'と'4'を指定して試しましたが確かにちゃんと動いてくれました。
この'1'と'4'の部分を変数に置換えて固定ではなく自由に
指定して絞り込む方法ですとうまくいってくれません。
私のやり方が悪いのか・・・何か抜けているのか・・・
いつも有難うございます!
直接'1'と'4'を指定して試しましたが確かにちゃんと動いてくれました。
この'1'と'4'の部分を変数に置換えて固定ではなく自由に
指定して絞り込む方法ですとうまくいってくれません。
私のやり方が悪いのか・・・何か抜けているのか・・・
投票数:0
平均点:0.00
nkmt
投稿数: 1668
![長老 長老](../../uploads/rank3dbf8eb1a72e7.gif)
タスク環境 → 範囲/位置付
式
INSTR(項目,'1')>=1 AND INSTR(項目,'4')>=1
では駄目なのでしょうか?
式
INSTR(項目,'1')>=1 AND INSTR(項目,'4')>=1
では駄目なのでしょうか?
投票数:0
平均点:0.00
ISHIJIMA
居住地: 静岡県
投稿数: 1827
![長老 長老](../../uploads/rank3dbf8eb1a72e7.gif)
項目にTrim関数を使用したらどうなりますか?
投票数:0
平均点:0.00
yamazawakt
居住地: 山形県
投稿数: 228
![長老 長老](../../uploads/rank3dbf8eb1a72e7.gif)
nkmtさん、ISHIJIMAさん
お世話になり有難う御座います。
TRIM関数を使用したら問題なく動いてくれました!
当初TRIM関数も使用していましたが、他が原因でうまく
動いてくれなかったのかもしれません・・・(汗)
また、何かありましたら相談させて頂ければと思います。
大変助かりました。有難う御座いました!
お世話になり有難う御座います。
TRIM関数を使用したら問題なく動いてくれました!
当初TRIM関数も使用していましたが、他が原因でうまく
動いてくれなかったのかもしれません・・・(汗)
また、何かありましたら相談させて頂ければと思います。
大変助かりました。有難う御座いました!
投票数:0
平均点:0.00
Tanda
投稿数: 2151
![長老 長老](../../uploads/rank3dbf8eb1a72e7.gif)
速度が遅いのは、Instr()関数は部分一致を総なめで検索するので、キーが効かないからです。
ちなみにDBは何ですか?SQL系ならそれでも早いほうだと思いますよ。Pervasiveだとかなり遅いかもです。
ちなみにDBは何ですか?SQL系ならそれでも早いほうだと思いますよ。Pervasiveだとかなり遅いかもです。
投票数:0
平均点:0.00
nkmt
投稿数: 1668
![長老 長老](../../uploads/rank3dbf8eb1a72e7.gif)
Pervasiveでしたら同じく範囲の式に
検索対象項目 LIKE '*'&TRIM(条件1)&'*'
AND
検索対象項目 LIKE '*'&TRIM(条件2)&'*'
でもいいんですかね。
検索対象項目 LIKE '*'&TRIM(条件1)&'*'
AND
検索対象項目 LIKE '*'&TRIM(条件2)&'*'
でもいいんですかね。
投票数:0
平均点:0.00
Tanda
投稿数: 2151
![長老 長老](../../uploads/rank3dbf8eb1a72e7.gif)
ちょっと違いますね。正しくは、
検索対象項目 LIKE('*'&TRIM(条件1)&'*') AND 検索対象項目 LIKE('*'&TRIM(条件2)&'*')
ですね。
それと、LIKE()関数はMagicの関数ですから、DBは何であってもOKです。
検索対象項目 LIKE('*'&TRIM(条件1)&'*') AND 検索対象項目 LIKE('*'&TRIM(条件2)&'*')
ですね。
それと、LIKE()関数はMagicの関数ですから、DBは何であってもOKです。
投票数:0
平均点:0.00
yamazawakt
居住地: 山形県
投稿数: 228
![長老 長老](../../uploads/rank3dbf8eb1a72e7.gif)
Tandaさん、 nkmtさん
再度のご回答頂き大変有難う御座います。
DBはPervasiveです。
LIKEを使用しての検索でもちゃんと動いてくれました!
しかし、Tandaさんのおっしゃるとおり確かに遅いですね。。。
条件内容が1文字であれば問題ありませんが
文字数が増えると遅くなってしまいます。
こちらは致し方ないですよね。。
再度のご回答頂き大変有難う御座います。
DBはPervasiveです。
LIKEを使用しての検索でもちゃんと動いてくれました!
しかし、Tandaさんのおっしゃるとおり確かに遅いですね。。。
条件内容が1文字であれば問題ありませんが
文字数が増えると遅くなってしまいます。
こちらは致し方ないですよね。。
投票数:0
平均点:0.00
Tanda
投稿数: 2151
![長老 長老](../../uploads/rank3dbf8eb1a72e7.gif)
DBは何をお使いですか?SQL系列であれば、Magicのプルダウンメニューの「タスク環境」→「範囲/位置付」→「SQL Where句」が使えます。
PervasiveでInstr()関数を使うより、はるかに高速な検索ができますよ。私の実験結果では、Pervasiveで52秒かかった部分一致検索が、SQL Where句ではわずか2秒で終わりました。26倍の速さです。
この検証結果とやり方については、私の過去の連載で次のようにまとめておりますのでよろしければご参照ください。
http://www.tandacomp.com/home/magic/writings
第38回 SQL Where 句の書き方 (2011年4月30日)
第39回 SQL Where 句の書き方(2) (2011年5月31日)
第40回 SQL Where 句の書き方(3) (2011年6月30日)
PervasiveでInstr()関数を使うより、はるかに高速な検索ができますよ。私の実験結果では、Pervasiveで52秒かかった部分一致検索が、SQL Where句ではわずか2秒で終わりました。26倍の速さです。
この検証結果とやり方については、私の過去の連載で次のようにまとめておりますのでよろしければご参照ください。
http://www.tandacomp.com/home/magic/writings
第38回 SQL Where 句の書き方 (2011年4月30日)
第39回 SQL Where 句の書き方(2) (2011年5月31日)
第40回 SQL Where 句の書き方(3) (2011年6月30日)
投票数:0
平均点:0.00
yamazawakt
居住地: 山形県
投稿数: 228
![長老 長老](../../uploads/rank3dbf8eb1a72e7.gif)
Tanda さん
何度も反応頂き有難う御座います。
DBはPervasiveですので「SQL Where句」は残念ながら
使用できません。。
今後を見据えて参考にさせて頂きます。
26倍の速さとはすごい差ですね(汗)
有難う御座いました!
何度も反応頂き有難う御座います。
DBはPervasiveですので「SQL Where句」は残念ながら
使用できません。。
今後を見据えて参考にさせて頂きます。
26倍の速さとはすごい差ですね(汗)
有難う御座いました!
投票数:0
平均点:0.00
Tanda
投稿数: 2151
![長老 長老](../../uploads/rank3dbf8eb1a72e7.gif)
ちなみに、その時のテストデータは12万件のレコードを使用しました。8年前のマシンですので、Instr()関数で52秒かかるのは納得できたのですが、SQL Where句が2秒で済んでしまったのは、何度試してみても自分の目を疑いました。しかし事実でした。
SQLっていうのは、人間が作ったものとは思えません。
ちなみに、SQL Where句は完全にMagic内での記述ですので、SQLコマンドの書式を知っている必要はありません。書き方が実に簡単です。別の方法である「埋め込みSQL」とは異なります。
SQLっていうのは、人間が作ったものとは思えません。
ちなみに、SQL Where句は完全にMagic内での記述ですので、SQLコマンドの書式を知っている必要はありません。書き方が実に簡単です。別の方法である「埋め込みSQL」とは異なります。
投票数:1
平均点:10.00