• ベストアンサー

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

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

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

  • ベストアンサー
  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.1

>連結されません。 見た感じとくに問題なさそうので勘違いだと思いますが、 連結されないというのは LEFT(カラム1, 20) のデータのみが表示されるということでしょうか? まずは英数字のみでやってみて、あとで日本語までチェックしてみては? ちなみにLENGTHはバイト単位ですが、LEFTは文字単位です また、IFの最終引数はLEFTはいらないのでは? 以下、変数を使った例 SET @HOGE:="123"; SELECT IF (LENGTH(@HOGE)>5, CONCAT(LEFT(@HOGE, 5),'...'), @HOGE) as comment 出力:123 SET @HOGE:="123456"; SELECT IF (LENGTH(@HOGE)>5, CONCAT(LEFT(@HOGE, 5),'...'), @HOGE) as comment 出力:12356... SET @HOGE:="あいうえおか"; SELECT IF (LENGTH(@HOGE)>5, CONCAT(LEFT(@HOGE, 5),'...'), @HOGE) as comment 出力:あいうえお...

noname#115727
質問者

お礼

MYSQL command lineクライアントで試したら上手くいきました。 どうもCSEだと正常に表示されないようです。 >ちなみにLENGTHはバイト単位ですが、LEFTは文字単位です >また、IFの最終引数はLEFTはいらないのでは? たしかにいらないですね。。。日本語も混じるので気をつけます。 回答ありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • ☆☆☆☆SQL Olacle 3つ以上の文字列を連結をスマートにする方法 ご教授下さい☆☆☆☆

    ご存知のかたご教授下さい。 select文で 3つ以上の文字列を連結して抽出したいのですが 適切な関数 方法がわかりません。初歩的質問ですみませんが困ってますのでご教授ください。 私の浅い知識だと 下記のようなconcat 関数を連続で記載する方法しかわかりませんでした。 select concat((concat (column1 ,column2)),column3) from sample_tbl;

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

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

  • 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)

  • Oracleでの文字列連結サイズの上限

    Oracle9iでテーブル内容をスプール出力していますが、カラム単位で余白を削除したい (トリムをかけたい)ので以下のようにカラムを連結させてスプールしています。 set colsep ',' spool test.csv select a ||','|| b ||','|| c from test_table spool off 実際の項目数は100以上あり、レコードの最大長も数千バイトになりますが、 各項目にMAXの値を入力して上記スプールを実行したところ、以下のエラーメッセージが 出力されました。 「ORA-01489: 文字列を連結した結果、長さが最大長を超えました」 データを連結した結果の長さが上限を超えたということなのでしょうが、 この最大長はどこで設定されているものなのでしょうか? また、そもそもスプール出力でトリムが効かないためにこのようなやり方で 出力していますが、他によい方法をご存知の方いましたら教えて下さい。 よろしくお願いします。

  • SQL文

    http://okwave.jp/qa/q1599858.html この質問に疑問があります。 回答2で where (column1 || '/' || column2 ||'/' || column3) like '%word1%' ; というアドバイスに対して質問者は where ( concat( column1 , column2 , column3) like '%word1%' ) でできたと返しています。 なぜ、質問者はwhere ( concat( column1 , column2 , column3) like '%word1%' ) というSQL文にいたったのでしょうか? where ( concat( column1 , column2 , column3) like '%word1%' ) では、だめだったのでしょうか?

    • ベストアンサー
    • MySQL
  • 文字列を入力すると文字化ける

    SQLにSELECT文を書き、サーブレットを通しjspに結果を出力したいのですが SQL文をこのように書いているにもかかわらず↓ "select sum(oni) as oni from テーブル名 where ken = '" + ken + "'"; いざ文字列を入力し、デバッグを確認すると下記のような文字化けを起こしています↓ select sum(oni) as oni from テーブル名 where ken = '本社' 文字列を入力してそのまま反映させるにはどこを書き換えれば良いのでしょうか?

  • 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
  • デザインビューで、連結式 を表示できません について

    毎度お世話になっております。 XP、ACCESS2003を使用しております。 クエリにSQL文を記入し実行後、 データシートビューでは結果が表示されるのですが、 デザインビューにすると デザインビューで、連結式 t1.CODE = t2.CODE を表示できません。 とメッセージがでます。 SQL文は以下の通りです。 SELECT t1.CODE FROM テーブル1 as t1 LEFT JOIN (SELECT テーブル2.CODE from テーブル2 ) as t2 ON t1.CODE = t2.CODE また、実行後にSQL文を編集しようとすると、 文字が途中で切れるような感じになります。 (fromのmを消すとoの半分も消えてしまいます。) このような状態は初めてです。 検索してもよくわかりませんでした。 よろしくお願いします。

  • 【word2010】 文字列連結演算子?について

    WORD2010で差込印刷をしています。 データ元で、項目A(文字列)ブランクの場合ブランク、項目Aがブランクでなければ項目B(文字列)と項目C(文字列)を表示させたいのですが、偽の戻り値の表記のしかたが分かりません。下記のように書くと項目B(文字列)しか戻ってきません。項目C(文字列)はどのように連結すればいいのでしょうか。演算子、「&」や「+」で連結すればいいのでしょうか? {if {MERGEFIELD 項目A} = """" {MERGEFIELD 項目B}{MERGEFIELD 項目C} } ご教授のほどよろしくお願いいたします。

  • 文字検索、列をまとめたい

    以下のようなテーブルで「test_id」ごとに文字列(contents)をまとめたいのです。 [テーブル1] test_id | name 1 山田 2 佐藤 3 鈴木 [テーブル2] id | test_id | contents 1 1 東京は晴れです。 2 1 電車です。 3 2 埼玉は晴れです。 4 3 電車です。 検索処理でテーブル1と2を結合しの「name」を表示します。 contentsが「東京」「電車」でand検索をすると0件になり、or検索をすると3件(名前は2人)ヒットするのですが、 「東京」「電車」としたときtest_idの「1」をヒットさせたいのです。 test_idをgroup byでsum(数値)のように文字列を指定するには どのようにすればいいのでしょうか。concatを使ってみたのですが、 (contentsのみを指定したから?)結果は得られず、わかりませんでした。 $sql="SELECT id,test_id,concat(contents), FROM テーブル1 as t1 left join テーブル2 as t2 on t1.test_id=t2.test_id where $where group by t2.Itest_id"; MySQL:4.0.27です。 よろしくお願いします。