• 締切済み

sql連結演算子concatと"||"

mysqlにて、"||" を連結演算子として使いたいと思います。 my.iniのsql-modeに"PIPES_AS_CONCAT"をカンマ区切りで追加しました。 しかし、結果として反映してくれませんでした。 最終的にjavaからアクセスしたいので、my.ini内で設定したほうが確実だと思ったのですが…。 "||" と同意のconcatも試してみましたが、 連結する文字列が多いせいか(10個くらいです)エラーになることと、 sqlのcase文とあわせて使うことができなかったので悩んでいます。 いい方法があればご教授ください、お願いします。

  • MySQL
  • 回答数1
  • ありがとう数0

みんなの回答

回答No.1

>my.iniのsql-modeに"PIPES_AS_CONCAT"をカンマ区切りで追加 MySQLのバージョンは何ですか? 変更した値が有効になっていますか?MySQLの停止・再起動をしましたか? SQLが入力できる状態で、以下のSQLを入力してみてください。 SELECT @@global.sql_mode >"||" と同意のconcatも試してみましたが、 >連結する文字列が多いせいか(10個くらいです)エラーになることと、 >sqlのcase文とあわせて使うことができなかったので悩んでいます。 具体的に「どういうSQLを実行しようとして、どういうエラーになるのか」を示してもらえなければ、誰も回答できません。

piyotarosu
質問者

補足

すみません、ちょっと長くなりそうだったので割愛してしまいました。 これではわかりませんね、申し訳ありません。 もう少し自分で考えてみます。

関連するQ&A

  • sql serverでgroup concat

    SQL SERVERを使用してGROUP CONCATと同等の結果を取得したいと考えています。 以下のcolumn1のテーブル名の値を条件を指定して、カンマ区切りの文字列で取得したいです。 column1 ----------- test1 test2 test3 求める出力結果 test1,test2,test3 調べたところ下記のように行うと近い結果を得ることができました。 SELECT my_column AS [text()] FROM my_table FOR XML PATH('') しかしこれだと区切り文字が指定できません。 カンマ区切りに指定をするにはどうすればよいでしょうか? よろしくお願いします。

  • 文字列の連結が上手くいきません

    カラム1が20バイト以上の場合は...を連結したいのですが下記のSQL文では ...が連結されません。 IF (LENGTH(カラム1)>20, CONCAT(LEFT(カラム1, 20),'...'), LEFT(カラム1, 20)) as comment 宜しくお願いします。

    • ベストアンサー
    • MySQL
  • 連結演算子で結合すると値がNullだと表示出来ない

    SQLで連結演算子(||)を使って、col1とcol2を連結させたいのですが、 どちらかの列の値がNullだと結果がNullでかえってきてしまいます。 Select col1 || '/' || col2 As set_col From table_name; col1には必ず値が入っているのですが、col2には値が入るとは限りません。 表示させる解決策はあるのでしょうか?

  • GROUP_CONCATで条件指定

    | ID | name | weight | height | | 1 | 佐藤 | 80 | 160 | | 2 | 太郎 | 90 | 160 | というテーブルから 佐藤と太郎の身長と体重 体重 佐藤:80Kg / 太郎:90Kg 身長 160cm というようにブラウザで表示したいのですが、 どのようにすればよいかわかりません。 現在はphpで $sql .= " SELECT "; $sql .= " GROUP_CONCAT(CONCAT(name, ':', weight, 'kg') SEPARATOR '/') AS weight "; $sql .= " GROUP_CONCAT(CONCAT(name, ':', height, 'cm') SEPARATOR '/') AS height "; $sql .= " FROM "; $sql .= " ex_table "; $rs = mysql_query($sql, $conn); $box =<<<EOM <table> <tr> <td cowspan="2"> 佐藤と太郎の身長と体重 </td> </tr> EOM; while($rec = mysql_fetch_array($rs)){ $box .= "<tr> "; $box .= "<td>体重</td>"; $box .= "<td>{$rec['weight']}</td>"; $box .= "</tr>"; $box .= "<tr> "; $box .= "<td>身長</td>"; $box .= "<td>{$rec['height']}</td>"; $box .= "<tr>"; } $box .= "</table>"; としていますが、これだと 佐藤と太郎の身長と体重 体重 佐藤:80Kg / 太郎:90Kg 身長 佐藤:160cm / 太郎:160cm となります。 同じ値のものは、そのまま数値だけを表示したいのですが、 SQL文で何かうまくする方法はないでしょうか。

    • ベストアンサー
    • MySQL
  • group_concatを複数列に設定する

    こんにちは group_concatを複数列に設定すると、グルーピングした結果が1行に繰り返し表示されてしまいます。 どのように解決すればよろしいのでしょうか? 例)カラムCOL1が主キーのテーブル MAIN_TABLE ----------- COL1| AAAA| SUB_TABLE1 ----------- COL1|VALUE AAAA|111111 AAAA|222222 SUB_TABLE2 ----------- COL1|VALUE AAAA|xxxxxxx AAAA|yyyyyy 上記のテーブルを下記のSQLで連結 SELECT M..COL1 ,group_concat(S1.VALUE,'/') AS GS1 ,group_concat(S2.VALUE,'/') AS GS2 FROM MAIN_TABLE AS M LEFT OUTER JOIN SUB_TABLE1 AS S1 ON M.COL1=S1.COL1 LEFT OUTER JOIN SUB_TABLE2 AS S2 ON M.COL1=S2.COL1 GROUP BY M.COL1 抽出結果が COL1|GS1 | GS2 ------------------------------------------------------------- AAAA|111111/222222/111111/222222|xxxxxxx/yyyyyy/xxxxxxx/yyyyyy と表示されてしまいます。カラムGS1とCS2に表示されているグループの繰り返しを削除し、 抽出結果を COL1|GS1 | GS2 --------------------------------- AAAA|111111/222222|xxxxxxx/yyyyyy にするにはどうすればよいのでしょうか?

    • ベストアンサー
    • MySQL
  • MySQLのGROUP_CONCATを実現する方法

    こんにちは。 T-SQLでMySQLのGROUP_CONCAT関数と同等の結果を出力する方法を探しています。 やりたいことは、 テーブル"T_A"の項目にカラム"C1"、"C2"があると仮定します。 テーブル"T_A"にはデータが以下のように登録されています。 C1|C2| ------ A1|YY| A1|XX| カラムC2のYY、XXの値を文字列連結"YY/XX"として、1レコードで表示したいです。 C1|C2 | --------- A1|YY/XX| ご存知の方がいらしたら、お教え願います。

  • 文字連結中の三項演算子について

    $buffer = ""; foreach($data as $key => $value){ $class = $value[0]['class']; $classbool = !empty($class); $buffer .= ',,'.$key.' 数: '.$value[0]['length'].' クラス: '; $buffer .= $classbool ? $class.',,<a href="' : 'なし,,<a href="'; この後$bufferに連結でURLなどが続く~~~~~~~~~~~~~~ 前後は省略していますがこういう式があります。コンマ文字は出力する際に改行に使っていますので気にしないでください。 この$bufferに連結代入している最後の二行部分を三項演算子を使って $buffer .= ',,'.$key.' 数: '.$value[0]['length'].' クラス: '. $cachebool ? $class.',,<a href="' : 'なし,,<a href="'; こう1行でやるとエラーは出ませんが結果がおかしくなります。 上記の二行に分けたものなら結果はちゃんと 数: 5 クラス: なし <a href="http://~~~ や、 数: 23 クラス: test <a href="http://~~~ と出力されますが、1行バージョンだと「~<a href="」までが抜け落ちていきなり http://~と出力されます。 最後の一行にした $buffer .= ~ の部分が全くなかったことにされているような感じです。 どうしてこうなるんでしょうか? また、一行にした場合と二行に分けた場合どっちが速いんでしょうか? どなたかご教授宜しく願います。

    • ベストアンサー
    • PHP
  • SQLPLUSにて演算子を使う方法と条件文を使いたい・・

    以下のようにspoolコマンドにてselectの結果をCSVに出力したいのですが、カンマ区切りしたいため連結していますがエラーが発生します。 spool aaa.csv select AAA || ',' || BBB || ',' ||   CCC - DDD || ',' || EEE from table_A ・・・ そうすると、引き算が引っかかっているらしく、 「ORA-01722:数値が無効です」エラーが発生します。 連結をやめて、「|| ',' ||」→「,」にすれば正常に終了します。 連結の場合に演算子を使うにはどのようにすればよいのでしょうか? また、例えば「AAA<0」の場合には、BBBに100を掛けるとかのような 他カラムでの条件により、別カラムの計算結果を変えるといったことは 可能なのでしょうか? よろしくお願い致します。

  • max_sp_recursion_depthを設定すると起動できなくなる。

    OpenOALP MYSQLの構築手順を元に設定を行っておりますが /etc/my.cnfにmax_sp_recursion_depth=255を設定後、再起動すると 下のerrログが出てmysqlが起動できません。 MySQLのインストール時に何かもれがあるのでしょうか? 教えて頂けますと助かります。 # cat /etc/my.cnf [mysqld] set-variable = key_buffer=256M set-variable = record_buffer=256M set-variable = join_buffer=256M sql-mode="STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION,PIPES_A S_CONCAT" max_sp_recursion_depth=255 errログ 060712 07:45:41 mysqld started 060712 7:45:41 [ERROR] /usr/local/mysql/libexec/mysqld: unknown variable 'max_s p_recursion_depth=255' 060712 07:45:41 mysqld ended Linux EP4.0 java version 1.5.0_07 jakarta-tomcat-5.5.17 httpd-2.0.55 mod_jk2.so mysql-5.0.15 jboss-4.0.4.GA

    • ベストアンサー
    • MySQL
  • GROUP_CONCAT✕複数列で、違うレコード数

    MySQLで、「GROUP_CONCAT」を「複数列」に適用させ、それぞれ異なるレコードを1つにまとめようとしたのですが、 取得出来る結果が、多い方の数に引き連られてしまいます。 ざっくりとした質問でアレなのですが、これは結合の仕方が悪い、 と推測されるでしょうか? そもそも「GROUP_CONCAT」を複数列に適用させる場合、それぞれ異なるレコード数をまとまることはできるのでしょうか?。 ■期待した取得結果 [テーブルAカラムc] => tokyo,osaka [テーブルAカラムd] => japan,japan [テーブルBカラムe] => windows [テーブルBカラムf] => man ■実際の取得結果 [テーブルAカラムc] => tokyo,osaka [テーブルAカラムd] => japan,japan [テーブルBカラムe] => windows,windows [テーブルBカラムf] => man,man 「テーブルB」の取得結果が、「テーブルA」取得結果数に引き連られてしまいます ■SQL(抜粋) SELECT  GROUP_CONCAT(a.c) AS c,  GROUP_CONCAT(a.d) AS d,  GROUP_CONCAT(b.e) AS e,  GROUP_CONCAT(b.f) AS f FROM hoge h LEFT JOIN テーブルA a ON (h.id = a.hoge_id) LEFT JOIN テーブルB b ON (h.id = b.hoge_id)