メインコンテンツへスキップ

空白以外の文字列範囲絞り込み

コメント

23件のコメント

  • Ace_Nagashima

    ASCIIコード先頭の01は制御文字「TC1(SOH)」なので

    ASCIIChr(1)で指定すれば良いと思います。

  • ISHIJIMA

    最小範囲・最大範囲ではないですが範囲式のところで項目<>''といれて対応しています。

  • tanakata

    Ace_Nagashimaさん

    なるほど、正常に動作しました。

    ありがとうございます。

     

    ISHIJIMAさん

    ありがとうございます。

    私も普段はそうしているのですが

    もっとシンプルにできないものかと、気になりまして・・・。

    実際、2000件程度のデータで検証したところ

    ライン表示速度はどちらも大差ないですが

    件数カウントは最小最大範囲のほうが圧倒的に速かったです

  • tanda

    cndrange() 関数は活用できないでしょうか?

  • tanakata

    tandaさん

     

    どのような活用を想定されていますか?

    空白以外を対象としたいため、特に活用法が思いつきません

  • tanda

    インデックス化できる項目であれば、ISHIJIMAさんの方法で高速検索になると思うのですがね。

  • tanakata

    急に話が飛びましたね。

    cndrangeの活用法はどうされました?

  • tanda

    cndrange()関数は、値があればその値で絞り込みをし、値がなければ範囲指定がなかったものと判定する関数です。ですので、活用法があれば使用されることをお勧めします。

  • tanakata

    ですから、その活用法を聞いているのですよ。

    私には思いつかないので。

    あるのですか?無いのですか?

    過去レスを見直して下さい

  • tanda

    tanakataさんのプログラムを見たわけではないので詳細な分析はできませんが、tanakataさんの判断で活用法が見当たらないようでしたら、無視していただいて構いませんよ。こういう関数も存在することをご紹介しただけです。

  • ISHIJIMA

    範囲で条件を指定すると必ずその範囲で実行されるのでパフォーマンスが落ちることがあります。

    条件を指定したくなくても値が入っているとどうしても範囲で実行されてしまいます。

    そのような時に私はcndrange()関数使用します。

    活用法ではなくてすみません。

  • tanakata

    メインソースの文字列カラムの最小範囲・最大範囲にて

    空白以外の文字列の絞り込みを行う場合

    最小値は何になるのでしょうか?

    という私の質問を見て、「cndrangeを活用できませんか?」と仰ったわけですよね?

    ということは、tandaさんの中で活用法を閃いたからそう仰ったのですよね?

    じゃないと紹介しませんよね?

    でなければ、何がしたいんですか?

    まともに私の質問を読んでいないのであればそう仰ってください

    スッキリしますので

     

  • ISHIJIMA

    範囲式を使用しない場合は変数を論理式で作成して代入のところに項目<>''と入れて

    範囲の大小にcndrange()関数でその条件を行いたいときに範囲が実行されるようにします。

    パフォーマンスは変わらないかもしれませんが 項目<>''と項目<>''以外がある場合には便利かもしれません。

    意味が違っていたらすみません

  • tanakata

    ISHIJIMAさん

     

    範囲式を使用しない場合は変数を論理式で作成して代入のところに項目<>''と入れて

    範囲の大小にcndrange()関数でその条件を行いたいときに範囲が実行されるようにします。

    今回の、空白でないものを絞り込みたい場合

    仰っている 変数を論理式で作成して代入のところに項目<>'' と

    変数の範囲の大小に'true'logをいれておけば実現できそうですね

    ありがとうございます

  • tanda

    ISHIJIMAさん、ありがとうございます。

    そういえば昔、その方法を「dbMAGIC道場」で紹介していたことを今、思い出しました。その当時はcndrange()なんていう関数はなかったので、論理値の true、falseで判定していました。tanakataさんが上でおっしゃっている通りの方法です。

    tanakataさん、すぐに具体的な活用法が思い付かなくてすみませんでしたね。古い記事すぎてすぐに思い出せなかったです。

  • ISHIJIMA

    多分できると思います。

    最近範囲式に設定していると入っているのを忘れていて何故だと悩むことがあるので

    (発見するまでに時間がかかったり・・・・)

    何のでこの方法にしています。(設定しているかすぐにわかるので)

    ただパフォーマンスは検証していないのでどうかなと

     

  • tanakata

    ISHIJIMAさん

    パフォーマンスについてはまた検証してみます。

    方法が2種類も見つかっただけでも大変満足です。

     

    tandaさん

    >すぐに具体的な活用法が思い付かなくてすみませんでしたね

    違うんですよ、cndrangeの活用法をすぐに思いつかないことはどうでもいいんです。そもそも無いですから。

    でもあなたは思いついたからcndrangeのくだりを仰ったんでしょう?

    じゃないとおかしいですよね?

    何か・・・話が通じませんね?大丈夫ですか?

     

    >古い記事すぎてすぐに思い出せなかったです。

    dbMAGIC道場で紹介されていたものが古い記事だったとして

    cndrangeを紹介したことと何の関係があるのでしょうか?

     

  • ISHIJIMA

    tanakata さん

    >パフォーマンスについてはまた検証してみます。

    今のところ実害がないので問題ないかとは思いますが

    パフォーマンスについて検証はできていないので

    検証できましたらまた教えて下さいね。

    よろしくお願いします。

  • ISHIJIMA

    必ず項目<>''が必須だとすればビューを作成してその中に条件を埋め込んでしまうのが良いかもです。

    固定的に条件がある場合、ビューを作成する方がパフォーマンスが良かったような気がします。

  • nkmt

    私もtanakataさんの最初の投稿を拝見して
    tandaさん紹介のCndRange関数が頭をよぎり2月8日に投稿しかけましたが
    求めていらっしゃる事とは違うなと自分の勘違いに気付き投稿は止めました。


    私も今日はすぐ範囲小に AsciiChr(1)を思いつきました。


    実際プログラム作るとすれば
    ISHIJIMAさん紹介の
    範囲式に <>'' を私も選択したと思いますが
    こちらの方はもしかすると全件取りだしでの判断になるのかな?
    速度は期待出来ないのかなと予想しました。


    件数が大量にある場合は
    もしかするとインデックスにヒットしたり
    DBによっては裏でソートが実行されるとかなどにより
    Ace_Nagashimaさん紹介の
    範囲小 にASCIICHR(1) を指定した方が高速な気はします。

  • ISHIJIMA

    nkmt さん

    >こちらの方はもしかすると全件取りだしでの判断になるのかな?
    >速度は期待出来ないのかなと予想しました。

    これです。(うまく説明ができなかったです)

    ビューだとSQLコマンドと同じような感じなので早かったような・・

    違っていたらすみません。

     

  • tanakata

    ISHIJIMAさん

    nkmtさん

    検証してみました。

    データ件数約12000

    内、空白3000、空白以外9000

    テーブルライン表示、件数カウント表示(事前読込)

    ASCIICHR方式・範囲式方式・変数代入方式・ビュー方式

    全て6秒でした。前回カウントで差が出たのは気のせいだったようです。失礼しました。

    ということで、多少の誤差はあるかもしれませんが

    数万件程度のテーブルであれば、どれを使っても大差無さそうです。

     

    色々とありがとうございました。

     

     

  • ISHIJIMA

    検証報告ありがとうございました。

サインインしてコメントを残してください。