ホーム   フォーラム   FAQ
 
メインメニュー
ログイン
ユーザー名:

パスワード:


パスワード紛失

複数条件の絞込み

  • このフォーラムに新しいトピックを立てることはできません
  • このフォーラムではゲスト投稿が禁止されています
前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 .2 .3 .4 | 投稿日時 2019-11-21 16:34
yamazawakt  長老 居住地: 山形県  投稿数: 228
お世話になります。

複数の条件で1つの項目の絞込み(範囲)機能を作成中ですが
うまく動いてくれません。

例えば、

 1233
 1122
 1234
 1100

上記のようなデータがあり、各変数でとった枠に
 条件1:「1」  条件2:「4」
と指定した場合「1234」のレコードが表示されるようにしたいのです。

INSTR関数を使用してみましたが単独ですと問題ありませんが
複数(条件1AND条件2)ですとデータが表示してくれません。

何か良い方法をご存じの方いらっしゃいましたらすみませんがご教授の頂けますと大変助かります。

宜しくお願い致します。


投票数:0 平均点:0.00
前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 | 投稿日時 2019-11-21 21:47
nkmt  長老   投稿数: 1668
タスク環境 → 範囲/位置付

 INSTR(項目,'1')>=1 AND INSTR(項目,'4')>=1
では駄目なのでしょうか?
投票数:0 平均点:0.00
前の投稿 - 次の投稿 | 親投稿 - 子投稿なし | 投稿日時 2019-11-21 21:47
nkmt  長老   投稿数: 1668
タスク環境 → 範囲/位置付

 INSTR(項目,'1')>=1 AND INSTR(項目,'4')>=1
では駄目なのでしょうか?
投票数:0 平均点:0.00
前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 | 投稿日時 2019-11-21 23:35
yamazawakt  長老 居住地: 山形県  投稿数: 228
nkmtさん

いつもご回答頂き大変有難う御座います!

おっしゃるとおりの内容でいけると思ってたのですが。。。
データが1件も表示されない状態になります。

他に何か手がありますでしょうか。
テーブルの形式自体を変えるとか。。。。
投票数:0 平均点:0.00
前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 | 投稿日時 2019-11-22 11:00
Tanda  長老   投稿数: 2151
nkmtさんの式で、ちゃんと動きますよ。

もう少し簡略化するなら、INSTR(項目,'1')>0 AND INSTR(項目,'4')>0 ですけど。
投票数:0 平均点:0.00
前の投稿 - 次の投稿 | 親投稿 - 子投稿なし | 投稿日時 2019-11-22 13:44
yamazawakt  長老 居住地: 山形県  投稿数: 228
Tandaさん

いつも有難うございます!

直接'1'と'4'を指定して試しましたが確かにちゃんと動いてくれました。

この'1'と'4'の部分を変数に置換えて固定ではなく自由に
指定して絞り込む方法ですとうまくいってくれません。

私のやり方が悪いのか・・・何か抜けているのか・・・
投票数:0 平均点:0.00
前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 | 投稿日時 2019-11-22 13:53
ISHIJIMA  長老 居住地: 静岡県  投稿数: 1827
項目にTrim関数を使用したらどうなりますか?
投票数:0 平均点:0.00
前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 | 投稿日時 2019-11-22 17:52 | 最終変更
yamazawakt  長老 居住地: 山形県  投稿数: 228
nkmtさん、ISHIJIMAさん


お世話になり有難う御座います。


TRIM関数を使用したら問題なく動いてくれました!

当初TRIM関数も使用していましたが、他が原因でうまく
動いてくれなかったのかもしれません・・・(汗)

また、何かありましたら相談させて頂ければと思います。
大変助かりました。有難う御座いました!
投票数:0 平均点:0.00
前の投稿 - 次の投稿 | 親投稿 - 子投稿なし | 投稿日時 2019-11-23 17:55
Tanda  長老   投稿数: 2151
速度が遅いのは、Instr()関数は部分一致を総なめで検索するので、キーが効かないからです。

ちなみにDBは何ですか?SQL系ならそれでも早いほうだと思いますよ。Pervasiveだとかなり遅いかもです。
投票数:0 平均点:0.00
前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 | 投稿日時 2019-11-24 8:07
nkmt  長老   投稿数: 1668
Pervasiveでしたら同じく範囲の式に

検索対象項目 LIKE '*'&TRIM(条件1)&'*'
AND
検索対象項目 LIKE '*'&TRIM(条件2)&'*'
でもいいんですかね。


投票数:0 平均点:0.00
前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 | 投稿日時 2019-11-24 17:47
Tanda  長老   投稿数: 2151
ちょっと違いますね。正しくは、

検索対象項目 LIKE('*'&TRIM(条件1)&'*') AND 検索対象項目 LIKE('*'&TRIM(条件2)&'*')

ですね。

それと、LIKE()関数はMagicの関数ですから、DBは何であってもOKです。
投票数:0 平均点:0.00
前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 | 投稿日時 2019-11-25 9:20
yamazawakt  長老 居住地: 山形県  投稿数: 228
Tandaさん、 nkmtさん

再度のご回答頂き大変有難う御座います。

DBはPervasiveです。

LIKEを使用しての検索でもちゃんと動いてくれました!
しかし、Tandaさんのおっしゃるとおり確かに遅いですね。。。

条件内容が1文字であれば問題ありませんが
文字数が増えると遅くなってしまいます。


こちらは致し方ないですよね。。



投票数:0 平均点:0.00
前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 | 投稿日時 2019-11-25 10:41
Tanda  長老   投稿数: 2151
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日)
投票数:0 平均点:0.00
前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 | 投稿日時 2019-11-25 10:51
yamazawakt  長老 居住地: 山形県  投稿数: 228
Tanda さん

何度も反応頂き有難う御座います。


DBはPervasiveですので「SQL Where句」は残念ながら
使用できません。。

今後を見据えて参考にさせて頂きます。
26倍の速さとはすごい差ですね(汗)

有難う御座いました!
投票数:0 平均点:0.00
前の投稿 - 次の投稿 | 親投稿 - 子投稿なし | 投稿日時 2019-11-25 11:07
Tanda  長老   投稿数: 2151
ちなみに、その時のテストデータは12万件のレコードを使用しました。8年前のマシンですので、Instr()関数で52秒かかるのは納得できたのですが、SQL Where句が2秒で済んでしまったのは、何度試してみても自分の目を疑いました。しかし事実でした。

SQLっていうのは、人間が作ったものとは思えません。

ちなみに、SQL Where句は完全にMagic内での記述ですので、SQLコマンドの書式を知っている必要はありません。書き方が実に簡単です。別の方法である「埋め込みSQL」とは異なります。
投票数:1 平均点:10.00

  条件検索へ


Copyright (C) Magic Software Japan K.K. All Rights Reserved.
個人情報保護方針 会員規約