• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:数字のカンマ区切りの文字列を分解したい)

数字のカンマ区切りの文字列を分解する方法

aozakana_dhaの回答

  • ベストアンサー
回答No.1

ストアドファンクションを作ってください。 8.1でもsplit_part関数は使用できるようですから、 これで数値部分を取り出して加算していけばいいかと思います。 まあ、カンマの数が例えば最大で10個とか決まっている場合は、 split_part関数を利用して力技でSELECTだけで完結させることもできそうですね。

killey
質問者

お礼

ストアドファンクションで処理を組んで解決出来ました。 ありがとうございました

関連するQ&A

  • 文字列内の数値を検索に使う場合の手法

    検索の仕方で質問があります。 WinXPでの開発です。 データベースはOracle、開発ソフトはC++Builder5です。 以下のようなテーブルとデータがあります。 TB2,TB3のidは必ずTB1に存在します。 TB3のdataには、カンマ区切りの文字列が入っています。 dataのカンマ区切りの内容は "コード,サイズ1,サイズ2" となっています。 実際はこのような単純なデータではないので、カラム分けするのは 設計時に難しかったようです。 ------------------------------ CREATE TABLE TB1 ( id number, name varchar2(20) ); 1 sample1 2 sample2 3 sample3 ------------------------------ CREATE TABLE TB2 ( id number, keyno number ); 1 100 3 200 ------------------------------ CREATE TABLE TB3 ( id number, data char(200) ); 1 aaa,0.1,0.2 2 bbb,0.3,0.4 ------------------------------ たとえば TB2.keynoが100であり、TB3.dataのサイズ1が0.1のデータのTB1.nameを取りだす という場合、どのようなSQL文になるのでしょうか? TB3のデータは読み込んだ後に一旦文字列を分解して コード、サイズ1、サイズ2を取得しないことには検索出来ないと思います。 一番高速な手法はどうなるでしょうか? トリガーを使って、作業用のテーブル作ってやればいい、 みたいなことを言われたのですが、トリガーは違うのでは?と思いながら 手法を悩んでいます。 ローカルデータベースのようなファイルを使ってやる方法になるのでしょうか? アドバイスをお願いします。

  • カンマ付数字をDBへ追加するにはどうしたらいいですか?

    txt1.setText(15,200) btn1.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { try{ // **接続情報** String drv = "org.postgresql.Driver"; String url = "jdbc:postgresql:postgres"; String usr = "postgres"; // **DBへの接続、問合せ** Class.forName(drv); Connection cn = DriverManager.getConnection(url, usr, pw); Statement st = cn.createStatement(); String qry1 = "INSERT INTO getuji (数字) VALUES ( "+ txt1.getText() + ");"; st.executeUpdate( qry1 ); // **DB切断** st.close(); cn.close(); } catch(Exception f){f.printStackTrace();} } }); txt1にカンマの付いている数字を入れるとエラーが出てしまいます。 カンマがなければエラーが起きないのですが何か良い方法はないでしょうか? DBのgetuji表のテーブル(数字)のデータ型はintegerです。なのですがこれを変えた方がいいのでしょうか? わかる方がいらっしゃいましたらよろしくお願いします。

    • ベストアンサー
    • Java
  • vba split関数 コンマ区切り

    エクセルに不慣れなため教えていただけたら幸いです。 A3~A11・B3~B11・C3~C11列にコンマ区切りの数字があります。 列によってはコンマで区切られた数字が3つのものと4つのものが混在しています。 split関数でコンマ区切りの数字を分割してE~H列・J~M列・O~R列に表示したいと考えています。 先ほど別の質問で下記のマクロを教えていただいたのですが、 その際は、A1~A9にあるものをD~G列に表示するというものでした。 よくよく考えると、A列のみではなく、B・C列と複数の列を コンマ区切りしたいと考えています。 このような場合は、どうしたらよいでしょうか。 vba不慣れなためわかりづらかったら申し訳ありません。 お分かりになられるかたがいらっしゃいましたら教えていただけますでしょうか。 よろしくお願いいたします。 Option Explicit ' Sub Macro1()   Dim Rout As Long   Dim Colu As Integer   Dim Expression As Variant '   For Rout = 1 To Cells(Rows.Count, "A").End(xlUp).Row     Expression = Cells(Rout, "A")     Expression = Split(Expression, ",") '     For Colu = 0 To UBound(Expression)       Cells(Rout, Colu + 4) = Expression(Colu)   Next Colu, Rout End Sub

  • MYSQLの差集合について

    MYSQLの差集合について MYSQLの差集合についてお教えください。OracleにはMinus、Postgres等はexceptがあります。MYSQLで同等の関数がないか調べましたが、無いのか検索がヘタなのかヒットしません。下記のようにSQLを書けばexceptと同じ効果があるのはわかりますが、exceptみたいにかけたら簡単かなと思います。そのような関数がありましたら、お教えください。よろしくお願い致します。 mysql> SELECT table1.* FROM table1 -> LEFT JOIN table2 ON table1.id=table2.id -> WHERE table2.id IS NULL;

    • ベストアンサー
    • MySQL
  • もうちょっと賢いSELECT文が書けないものでしょうか

    初めまして、最近SQLをかじり始めたぺーぺーです。 効率の悪いSELECT文しか書けずに困っています。 下記のテーブルsoftware_tableから、 ・name列「oracle」 ・version値が最大 のレコードに含まれるid(=3)を拾ってきたいのですが、自分の頭では副問い合わせを使う方法か、ソートを使う方法しか思いつきません。 問題は副問い合わせ・ソートを使うと計算コストが大きくなってしまうことで、できることなら副問い合わせ・ソートを使わずに解決したいのですが、何か方法はないものでしょうか? よろしくお願い致します。 ----------------------------- software_table id name version 1 oracle 1 2 oracle 2 3 oracle 3 4 postgres 1 5 postgres 2 6 postgres 3 7 postgres 4 ----------------------------- ■副問い合わせを使った方法 SELECT id FROM software_table WHERE name = 'oracle' AND version = (SELECT max(version) FROM software_table WHERE name = 'oracle'); ■ソートを使った例 SELECT id FROM software_table WHERE name = 'oracle' ORDER BY version DESC LIMIT 1 OFFSET 0; -----------------------------

  • 複数のテーブルを参照して値を変更する方法

    お世話になっております。 以下のようなテーブルがあったとして、table1,table2の値を参照して加算し、master_tableの値を変更するようなSQLは一つの文で書く方法はありますでしょうか? 例えば、あるSQLを実行すると、master_tableのid1のscoreが500になるようなSQLです。 どなたかご教授ください。 master_table id | score 1 | 0 2 | 0 table1 id | score 1 | 100 2 | 300 table2 id | score 1 | 400 2 | 100

    • ベストアンサー
    • MySQL
  • PDOで文字列が正しく書けない

    PHP5.5(Windows 32bit) with PDO(PostgreSQL) + PostgreSQL 9.3(64bit) + Windows 7 です。 id(integer PK), text1(text), text2(text) の列を持つテーブル test に対して  INSERT INTO test (id, text1, text2) VALUES (41, '\', '<?xml version="1.0"?>') を pgp admin で実行すると正常に行がインサートされます。ところが PDO の prepare にこの SQL を単純に渡して実行すると text2 に <$1xml version="1.0"$2> というおかしな文字列がセットされてしまいます。 どうも 直前の列データが '\' というように、末尾が \ になっている文字列を渡す時だけ 次の列データ '<?xml version="1.0"?>' の中の ? がプレースホルダーとして処理されるっぽいのです。 どう考えてもPDOのバグのような気がするのですが、お心当たりのバグや回避方法などありましたら よろしくお願い致します。

    • 締切済み
    • PHP
  • mysqlの関数でereg_replace

    レコードから、特定のドメインを含むURLを消去する、といった動作をmysqlの関数で実現しようと考えてます。phpで言うところのereg_replace()のような関数がmysqlであるかどうかということです。 以下のように"bbs"というテーブルの"com"というフィールドからURLに値する文字列を消去するSQL分を実行しましたがこれは動作しませんでした。 update bbs set com = replace(com,regexp '(https?|ftp|news)(://[[:alnum:]\+\$\;\?\.%,!#~*/:@&=_-]+)','') where com regexp '(https?|ftp|news)(://[[:alnum:]\+\$\;\?\.%,!#~*/:@&=_-]+)'; replace関数の第二引数にregexpを使用することができませんでした。(やり方が間違ってるのでしょうか?) phpのereg_replaceを使用してフィールド"com"に含まれるURLを消去していくというやり方で実現は可能なのですが、動作の軽さやソースのシンプルさを考え、SQL文で実現することを考えてます。 mysqlのヴァージョンは3.23.58です。 よろしくお願いいたします。m(__)m

  • Postgresのことで・・・

    質問があります。 --test_tbl---------------------- id : integer uid : varchar(32) name : varchar(64) day :date -------------------------------- という上記のテーブルがあるとします。 このテーブルのnameフィールドを varchar(64)からvarchar(120)に変更したいのですが どのようにすればいいでしょうか? Postgresのヴァージョンは7.3.2です。 宜しくお願いいたします。

  • text型のデータをintegerにキャストしたいのですが…

    お世話になります。 postgres+php4で現在開発をしています。 テーブル設計を間違っていたようで、年月が6桁の数値(200404 等)で入る項目をtext型で作っています。 この値を、where句の中でintegerとして扱いたいのですが、where句の中でキャストは出来ないものでしょうか? sqlは初心者でよく分かりません… どなたかアドバイスお願い致します。