空白以外の文字列範囲絞り込み
お世話になっております
メインソースの文字列カラムの最小範囲・最大範囲にて
空白以外の文字列の絞り込みを行う場合
最小値は何になるのでしょうか?
最大値は「゜」だと聞いたことがありますが
DBによって変わるようでしたら、ご存知のDB全て教えて頂けると助かります。
よろしくお願いします
-
ASCIIコード先頭の01は制御文字「TC1(SOH)」なので
ASCIIChr(1)で指定すれば良いと思います。
-
最小範囲・最大範囲ではないですが範囲式のところで項目<>''といれて対応しています。
-
Ace_Nagashimaさん
なるほど、正常に動作しました。
ありがとうございます。
ISHIJIMAさん
ありがとうございます。
私も普段はそうしているのですが
もっとシンプルにできないものかと、気になりまして・・・。
実際、2000件程度のデータで検証したところ
ライン表示速度はどちらも大差ないですが
件数カウントは最小最大範囲のほうが圧倒的に速かったです
-
cndrange() 関数は活用できないでしょうか?
-
tandaさん
どのような活用を想定されていますか?
空白以外を対象としたいため、特に活用法が思いつきません
-
インデックス化できる項目であれば、ISHIJIMAさんの方法で高速検索になると思うのですがね。
-
急に話が飛びましたね。
cndrangeの活用法はどうされました?
-
cndrange()関数は、値があればその値で絞り込みをし、値がなければ範囲指定がなかったものと判定する関数です。ですので、活用法があれば使用されることをお勧めします。
-
ですから、その活用法を聞いているのですよ。
私には思いつかないので。
あるのですか?無いのですか?
過去レスを見直して下さい
-
tanakataさんのプログラムを見たわけではないので詳細な分析はできませんが、tanakataさんの判断で活用法が見当たらないようでしたら、無視していただいて構いませんよ。こういう関数も存在することをご紹介しただけです。
-
範囲で条件を指定すると必ずその範囲で実行されるのでパフォーマンスが落ちることがあります。
条件を指定したくなくても値が入っているとどうしても範囲で実行されてしまいます。
そのような時に私はcndrange()関数使用します。
活用法ではなくてすみません。
-
メインソースの文字列カラムの最小範囲・最大範囲にて
空白以外の文字列の絞り込みを行う場合
最小値は何になるのでしょうか?
という私の質問を見て、「cndrangeを活用できませんか?」と仰ったわけですよね?
ということは、tandaさんの中で活用法を閃いたからそう仰ったのですよね?
じゃないと紹介しませんよね?
でなければ、何がしたいんですか?
まともに私の質問を読んでいないのであればそう仰ってください
スッキリしますので
-
範囲式を使用しない場合は変数を論理式で作成して代入のところに項目<>''と入れて
範囲の大小にcndrange()関数でその条件を行いたいときに範囲が実行されるようにします。
パフォーマンスは変わらないかもしれませんが 項目<>''と項目<>''以外がある場合には便利かもしれません。
意味が違っていたらすみません
-
ISHIJIMAさん
範囲式を使用しない場合は変数を論理式で作成して代入のところに項目<>''と入れて
範囲の大小にcndrange()関数でその条件を行いたいときに範囲が実行されるようにします。
今回の、空白でないものを絞り込みたい場合
仰っている 変数を論理式で作成して代入のところに項目<>'' と
変数の範囲の大小に'true'logをいれておけば実現できそうですね
ありがとうございます
-
ISHIJIMAさん、ありがとうございます。
そういえば昔、その方法を「dbMAGIC道場」で紹介していたことを今、思い出しました。その当時はcndrange()なんていう関数はなかったので、論理値の true、falseで判定していました。tanakataさんが上でおっしゃっている通りの方法です。
tanakataさん、すぐに具体的な活用法が思い付かなくてすみませんでしたね。古い記事すぎてすぐに思い出せなかったです。 -
多分できると思います。
最近範囲式に設定していると入っているのを忘れていて何故だと悩むことがあるので
(発見するまでに時間がかかったり・・・・)
何のでこの方法にしています。(設定しているかすぐにわかるので)
ただパフォーマンスは検証していないのでどうかなと
-
ISHIJIMAさん
パフォーマンスについてはまた検証してみます。
方法が2種類も見つかっただけでも大変満足です。
tandaさん
>すぐに具体的な活用法が思い付かなくてすみませんでしたね
違うんですよ、cndrangeの活用法をすぐに思いつかないことはどうでもいいんです。そもそも無いですから。
でもあなたは思いついたからcndrangeのくだりを仰ったんでしょう?
じゃないとおかしいですよね?
何か・・・話が通じませんね?大丈夫ですか?
>古い記事すぎてすぐに思い出せなかったです。
dbMAGIC道場で紹介されていたものが古い記事だったとして
cndrangeを紹介したことと何の関係があるのでしょうか?
-
tanakata さん
>パフォーマンスについてはまた検証してみます。
今のところ実害がないので問題ないかとは思いますが
パフォーマンスについて検証はできていないので
検証できましたらまた教えて下さいね。
よろしくお願いします。
-
必ず項目<>''が必須だとすればビューを作成してその中に条件を埋め込んでしまうのが良いかもです。
固定的に条件がある場合、ビューを作成する方がパフォーマンスが良かったような気がします。
-
私もtanakataさんの最初の投稿を拝見して
tandaさん紹介のCndRange関数が頭をよぎり2月8日に投稿しかけましたが
求めていらっしゃる事とは違うなと自分の勘違いに気付き投稿は止めました。
私も今日はすぐ範囲小に AsciiChr(1)を思いつきました。
実際プログラム作るとすれば
ISHIJIMAさん紹介の
範囲式に <>'' を私も選択したと思いますが
こちらの方はもしかすると全件取りだしでの判断になるのかな?
速度は期待出来ないのかなと予想しました。
件数が大量にある場合は
もしかするとインデックスにヒットしたり
DBによっては裏でソートが実行されるとかなどにより
Ace_Nagashimaさん紹介の
範囲小 にASCIICHR(1) を指定した方が高速な気はします。 -
nkmt さん
>こちらの方はもしかすると全件取りだしでの判断になるのかな?
>速度は期待出来ないのかなと予想しました。これです。(うまく説明ができなかったです)
ビューだとSQLコマンドと同じような感じなので早かったような・・
違っていたらすみません。
-
ISHIJIMAさん
nkmtさん
検証してみました。
データ件数約12000
内、空白3000、空白以外9000
テーブルライン表示、件数カウント表示(事前読込)
ASCIICHR方式・範囲式方式・変数代入方式・ビュー方式
全て6秒でした。前回カウントで差が出たのは気のせいだったようです。失礼しました。
ということで、多少の誤差はあるかもしれませんが
数万件程度のテーブルであれば、どれを使っても大差無さそうです。
色々とありがとうございました。
-
検証報告ありがとうございました。
サインインしてコメントを残してください。
コメント
23件のコメント