• ベストアンサー

SQLでのsplitなどは?

SQLでsubstrなどは使えますが、 splitなどは使えるのでしょうか? 現在 m_784378_0410 m_klds_0411 m_klsdas_0411 m_klsdas_0412 表示したいデータ 0410 0411 0412 というデータを 後ろの日付のみでグループ化したいのですが、 文字のサイズが固定ではないため、一度splitなどで配列に格納したいのですが、やり方がわかりません。 何かよい方法があれば教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.3

横レスですけど group by eventid order by eventid のeventidも substrしないと意味ないと思いますが

aiurai54
質問者

お礼

ほんとうですね~!! 助かりました。ありがとうございました。

その他の回答 (2)

  • panick
  • ベストアンサー率40% (26/64)
回答No.2

SQL では split を使えません。 このような場合には length() 関数を使い、文字列の後ろから 4 文字を切り出して日付を求めるのが良いと思います。 substr(文字列, length(文字列) - 3)

aiurai54
質問者

補足

select substr(eventid, length(eventid) - 3) as eventid from DB名 where 1=1 and eventkind=7 and deleteflag=0 and (to_date(term_p,'YYYY-MM-DD') <= to_date(now(),'YYYY-MM-DD')) group by eventid order by eventid desc limit 30; 教えていただいたものを利用して、上記のようなSQL文を作成しましたが、うまく表示されません。 とにかくグループ化ができないようです。 ここでおかしなところがあれば教えてください。

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.1

splitというような関数はありません。 ちょっと面倒ですけど、以下のようにして取り出せると思います。(試してはいませんけど) substr(ltrim(string,'m_'),strpos(ltrim(string,'m_'),'_')+1,4)

aiurai54
質問者

お礼

ありがとうございます。

関連するQ&A

  • 任意の区切り文字でsplitする方法

    VBAで任意の区切り文字でsplitする方法を教えてください。 例えば 123 456 789 333 3444 66 65 22 といようなスペースあるいはタブで区切られたテキストデータがあるとします。 これを配列に格納したいのですが、 この区切りがタブ一つとか、スペース一つとか決まっていれば split関数で簡単に配列に格納することができますが、 タブかも知れないし、スペースがかも知れないし その数も未定の場合にはどうしたら良いですか? replace関数を使って、まず全てのタブをスペースに変換し その後に、複数のスペースを一つのスペースに変換し 最後にsplit関数を使うという方法しかないでしょうか? もっとスマートな方法があれば教えてください。

  • split() 正規表現

    正規表現で / (スラッシュ) .(ドット)にマッチ 正規表現により文字列を分割し、配列に格納する split("[/\.]" $v)としていましたが split関数が使えなくなるので、変わりの方法を考えていますが preg_split()などではうまくいきませんでした。 何か方法を教えて下さい。

    • ベストアンサー
    • PHP
  • 複数の空白のsplitについて

    VB.NEtを最近はじめた初心者です。 CSVファイルを読み込んでデータを空白でsplitして 配列に格納しようとしたのですが、 CSVファイルのデータの間にある空白の数が1~3個 と一定ではなかったためうまくsplitできません。 どのように対処すればよいでしょうか。 ご教授願います。

  • preg_splitがうまくいかないので、教えてく

    9月18日(火)7時55分を配列へ格納したいです。 ■1 $data = preg_split("/月|日|\(.\)|時|分/",$data); とやると、うまく区分けされないところがあります。 Array (  [0] => 9  [1] => 18  [2] => (火)7  [3] => 55 ) ■2 preg_split("/月|日|\(*\)|時|分/",$data);とやると、 曜日のところが変な感じになります Array (  [0] => 9  [1] => 18  [2] => (火  [3] => 7  [4] => 55 ) ■3 preg_split("/月|日|\(.*\)|時|分/",$data); もしくは、 preg_split("/月|日|\(.*?\)|時|分/",$data); とやると、曜日が取得できません Array (   [0] => 9   [1] => 18   [2] =>   [3] => 7   [4] => 55 ) ■質問 ・きれいに区切るには、どう書けば良いでしょうか? ・後、正規表現も勉強したいので、それぞれなんで駄目なのか教えてください

    • ベストアンサー
    • PHP
  • C# Splitと配列の複合方法

    こんにちは、 ”てすと、です。¥四月、寒い。” のような文字列があり これを¥で区切り、さらにカンマで区切って(Splitでここはできたのですが) 結果を下記のように配列に格納したいと思うのですが、どのように記述すればよいでしょうか? 配列(0,0)=”てすと” 配列(0,1)=”です。” 配列(1,0)=”四月” 配列(1,1)=”寒い。” 文字列の内容が定まっていないため配列の要素数が変動してするものでして。

  • VB6・Split関数・連続した空白について

    お世話になります。 VB6で、データ処理を行いたいと思っています。データを読み込んで、列ごとに配列へ格納することを考えています。 しかし、データによって列の数が異なっており、行き詰ってしまいました。 最初は3列のデータだったので、単に Input #(ファイル番号), A(i), B(i), C(i) としたのですが、後になって6列やら、8列のデータが出てきて、通用しなくなりました。 そこで、LineInputで1行ごとに読み込み、Splitを使って値を列ごとに配列へ格納しようと考えました。 しかし、データを見ると値を区切っている空白は複数(3~8程度)で、 うまくSplitできませんでした。 以前にも、VB.NETの場合での似たような質問がされていましたが、VB6ではどのようにしたらよいのでしょうか。 当方初心者なのでお恥ずかしい質問ですが、よろしくお願いします。

  • splitについて教えてください。

    @name=("ひろと","けいた","はやと","りゅうすけ","とらのすけ"); @str=@name; print "@str\n"; @str=join(";",@str); print "<br>@str\n"; @str=split(/;/,@str); print "<br>@str\n"; 上記のような配列を作成したプログラムを実験で作ってみました。(一部抜粋です。htmlで表記されるようにしています。) ブラウザで見てみると、以下のようになりました。 ひろと けいた はやと りゅうすけ とらのすけ ひろと;けいた;はやと;りゅうすけ;とらのすけ 1 その中の3行目の「1」とだけ表示された理由がわかりません。 splitにより、joinで作成された一つの文字列を、 再び「;」で区切って要素数が5つの配列に戻したかったのですが、 なぜか1と返されてしまいました。 splitの使い方を教えていただけないでしょうか。

    • ベストアンサー
    • CGI
  • [ACCESS97]SQLの書き方

    グラフのレコードソースにクエリ・SQLを使用しています。データ入力チェックに使おうと思っています。妙なデータがはいった場合、グラフが乱れるのではないかと。 ソートは日付でしています。 それで、100レコードずつを順番に表示していきたいのですが、top値 だと最初からいくつ、、としか指定できません。これを、レコードの途中の任意の位置から取るにはどうしたらいいのでしょうか? IDとかのようにユニークな値でソートしているのであれば、大小関係で一発ですが、同じ値がいくつも存在する日付なもので困っています。 日付でソートしたものを配列に入れる、もしくは一度テーブルに書き出す等も考えているのですが、SQLでできたら助かります。 よろしくお願いします。

  • PLSQLでのSQLの実行に関しての質問

    [環境] db:oracle 11g express edition os:windowsXP 言語:PLSQL [質問] PLSQLを使用したプログラムを作成していたのですが、SQLの文字数がVARCHAR2(32767)で宣言した変数の文字数を超えてしまいエラーとなります。 理由としては、引数で受け取った配列の数分だけUNIONでSQLを結合し、変数に格納しているのですが、配列の量が多いと変数の最大文字列を超えてしまうようです。(ソースイメージは下記に記述) 対応としては、変数を分割し、SQLを実行することや、SQLを組みなおすなどの対応が考えられるのですが、”(1)処理速度の都合上、できれば1度のSQLで実行したい。”、”(2)抽出条件が配列の条件によって、複雑に変わることと、既に稼働しているプログラムの為あまりソースを変更したくない”という理由から検索条件は変えずに、1度のSQLでどうにか実行できないかと考えています。 上記条件をクリアする何か良い方法はありますでしょうか? (もし、1回のSQLで実行は難しいのであれば、最悪配列を使用してSQLを分割して対応しようとは思っています。ただ、他に方法があるのであればそれに越したことはないです。) どなたか良い方法をご存知の方がおりましたら教えていただけないでしょうか? 宜しくお願い致します。 [ソースイメージ] <引数> 配列[100];          <-- 条件が格納された配列 <変数定義部> hensu_union VARCHAR2(32767); <-- 結合したSQLを格納 hensu_where VARCHAR2(1000); <-- SELECTの条件の格納 <プログラム部>  <省略>  .  .  .   FOR i IN 1..配列分 LOOP <-- 配列の数分、UNIONでSQLを結合 IF i > 1 THEN hensu_union := hensu_union || 'union '; END IF; hensu_union := hensu_union || 'select A,B,C .... from マスタA、マスタB WHERE ' || hensu_where ;  ←ここのUNIONで結合しすぎると最大文字列を超えエラー  END LOOP; . .  省略 . .   OPEN カーソル名 FOR hensu_union ; ←SQLを実行する部分でどうにか1回で済ませたい。                    VARCHAR2を超えるような文字列を格納できたり、                    他の良い方法はあるのか?

  • SQLについて

    SQLについて質問です。 現在vbからmdbファイルにある日付間のデータを取得するようなsqlをなげているのですがうまくいかないのでお知恵をお貸しください、、、 sql文は ("select * from ABC where date between ""'" & hiniti & "'"" and ""'" & hiniti2 & "'"" ;") hinitiには日付(2006/4/5)hiniti2には(2006/7/4)のように日付が入ったとするとデータは2006/4/5以降から2006/7/4までしか取得してこないのです。 BETWEEN 演算子は境界値も含むらしいので2006/4/5のデータが取れない理由がわかりません。 日付が文字列というのが問題あるのでしょうか?