• ベストアンサー

CONCAT以外で文字列連結できますか

MYSQL5.5でCONCAT以外で文字列連結できるでしょうか? 調べてみると他のDBは「||」が使えるみたいですが、mysqlは使えません。 何かCONCAT以外で代替きかないかなと思い質問させて頂きました。 よろしくお願いします。

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

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

MySQLの独自構文と、標準SQLの構文を体感するごく簡単な例を作ってみました。 -- テスト用の表定義&データ drop table if exists `t1`; create table t1 (`c1` int primary key ,`c1-1` int ,`c2` varchar(5) ,`c3` varchar(5) ,`dt` date ); insert into t1 values (1,100,'abc','xyz','2011-04-01') ; -- SQLモードの確認 select @@global.sql_mode; select @@session.sql_mode; -- MySQL構文とANSI構文の違い、引用符の意味などを確認するSQL例 select * , 1 -- 数値定数 , c1-1 -- 「列c1-1」という減算 , 'c1-1' -- 「'」(単一引用符)で囲んだものは文字定数 , "c1-1" -- 「"」(二重引用符)で囲んだものは、 -- MySQL構文モードでは文字定数 -- ANSI構文モードでは、列名など名前。 , `c1-1` -- 「`」(バッククォート)で囲んだものは、 -- MySQL独自仕様であり、列名など名前。 , 'abc'||'def' -- 「||」は、 -- MySQL構文モードでは、論理演算のor -- ANSI構文モードでは、文字連結 , concat('abc','def') -- MySQL独自の文字連結関数 , 2011-04-14 -- yyyy-mm-ddを文字定数として指定しないと、 -- 日付でなく、単なる整数の減算として扱われる , '2011-04-14' -- 'yyyy-mm-dd'といった形式の文字定数は、 -- 日付データ型と型変換してくれる。 from t1 ; -- この接続だけ、一時的にANSI構文モードに変更 set @@session.sql_mode='ANSI'; この後、上述のselect文を再度、実行して結果の違いを確認してみてください。

mellow91
質問者

お礼

凄いです!こんな方法があるとは・・・感謝感謝です!ありがとうございます!

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

その他の回答 (2)

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

言語によって関数の書式や演算子の意味が異なることはよくあること ||はMySQLではORですから連結演算子にはつかえません。 http://dev.mysql.com/doc/refman/5.1/ja/extensions-to-ansi.html 移植性を考慮してのことでしょうけど、すでに定義されているものを いじるとなるとそちらのケアまで考慮しないといけないので かえって問題が広がる可能性があることも考慮してください (つまり素直にCONCATつかいなさい・・・ってことなんですけど)

mellow91
質問者

お礼

お察しのとおりなのですが、CONCATを使いなさいということですね。わかりました!ご丁寧にありがとうございました!!

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

質問の意図が分かりません。 どういう理由で、代替手段を必要としているのでしょうか? まず、MySQLでは、SQLの構文モードが存在します。インストール時の標準設定では、MySQL構文モードになっています。 標準SQLや主要なRDBMSでは、「"」(二重引用符)で囲んだものは、表名や列名などの名前ですが、MySQL構文モードでは、文字定数になります。 一方、標準SQL準拠にするには、SQLモードでANSI構文モードにするといった方法があります。 http://dev.mysql.com/doc/refman/5.1/ja/server-sql-mode.html それ以外には、アプリ側でやるとかいろいろ方法は考えられます。

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

関連するQ&A

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

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

  • 項目以外の文字列は連結できますか?

    やりたいことは、日付と時間の項目から 現在時刻を過ぎているかのフラグを返す事ですが、 MySQLで普通の文字列を連結する方法がわかりません。 どのようにすれば実現できるでしょうか? SELECT IF(CONCAT(end_day,end_time) < NOW(), 1,0) end, from test testテーブル |end_day |end_time |2006-03-15 | 10:00 |2006-03-20 | 10:00

    • ベストアンサー
    • MySQL
  • ゼロを含む文字列の連結方法

    初歩的な質問かもしれませんが、お願いします。 ゼロが連続する文字列を連結させて、ひとつの文字列にしたいのですが、strcpyとstrcatの組み合わせでは、00があった時点でこの部分が抜けてしまいます。ゼロを含む完全な形で連結する方法をお願いします。 例: 文字列A:「0001」と文字列B:「0055」と文字列C:「00AA」を連結して、 文字列X:「0001005500AA」を作りたいのです。

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

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

  • エクセルVBA 行を文字列連結している列を連結した

    エクセルシートで行を文字列連結している列を連結したいのですが・・ 行を文字列連結しているセル「AY4」は、 データー入力されていない時は、「0」表示しないとか「””」もしくは指定文字列にしています。 =IF(AT4=0,"連結なし",ConcatenateRangeText(C4:AY4)) もしくは =IF(AT4=0,"",ConcatenateRangeText(C4:AY4)) この「AY4」のセルでデーター入力されたものだけ文字列連結したい 画面上は空白だったり「連結なし」と表示されるのでコピーすれば良いのしょうが、ユーザーフォームのCommandButton11_Click()で処理したいのですが。 又、データー入力のある、行の文字列連結と列の文字列を一緒で出来ても良いのですが

  • My SQL の concat文について

    あるテーブルtable01にname列があったとします。 その列に ”様" をつけたいと思い、concat文を使おうと思い、 以下のようにしたのですが、 mysql> Select concat(name,"様") from table01; +-------------------+ | concat(name,"様") | +-------------------+ | ito様 | | sato様 | | aikawa様 | | abe様 | | yamada様 | +-------------------+ 5 rows in set (0.00 sec) 列名もconcat(name,"様")となってしまっていますが、 As nameを使う以外に nameとだけ表示させる方法はありますか?

    • ベストアンサー
    • MySQL
  • Excelの文字列と文字列の連結

    A1のセルにはj50 C1のセルには01(ユーザ定義で00の書式) この二つの数値をCONCATENATE()関数を用いて文字列を 連結するとj501となってしまいます。 C1のセルを文字列の書式にするとうまくj5001と表示されますがそれ以外に方法はないでしょうか?

  • 文字列の連結

    文字列の連結 select * from test where testcolum=変数名 といった感じで、文字列と変数を連結したいのですがやり方がわかりません。 declare cdata varchar2(20); begin cdata:='sample'; 'select * from test where testcolum=' || cdata; end; 上のように、select文を動的に変更して実行したいのです。 よろしくお願いします。 /

  • [コマンドプロンプト]文字列を繋げる

    先ほどこちらで回答いただき、 http://oshiete1.goo.ne.jp/kotaeru.php3?q=920416 やったー!あとはhogehoge@hoge.ne.jpを regeditいじって%1に置き換えて 解決だーと思っていたら・・・・ 基本的な(ことだろう)ことを 自分は知らないことに気が付いた それはコマンドプロンプトにおける「文字の連結」 これは http://f22.mail.yahoo.co.jp/ym/Compose?&To= という文字列と 展開済みの%1をつなげなければならないのだ いままで使用していたのは連結なしの %1だったからこういう経験がなかった どこかでconcatってどこかで言葉を聞いた記憶があったので concat /?で調べるも無駄 どうやってやるのでしょう?(滝汗?)

  • +演算子で文字列を連結できるのは何故?

    JAVAを勉強中に疑問に思ったので質問します。 JAVAでは演算子のオーバーロードができないと思いますが、 +演算子で文字列の連結できるのはどのような仕組みなんでしょう? Stringだけ特別なんでしょうか?

    • ベストアンサー
    • Java
このQ&Aのポイント
  • バッファローのルーターからELECOMのルーターに交換しようとした際、スマホの設定の接続のWi-Fiにはバッファローの表示しか出てこない状況が発生しました。ELECOMの表示を表示させる方法について教えてください。
  • バッファローのルーターからELECOMのルーターに交換する方法を教えてください。現在、スマホの設定の接続のWi-Fiにはバッファローの表示しか出ていないので、ELECOMの表示をさせるためにはどうすればよいのでしょうか。
  • バッファローのルーターからELECOMのルーターに交換しようとしていますが、スマホの設定の接続のWi-Fiにはバッファローの表示しか出ていません。ELECOMの表示を表示させる方法を教えてください。
回答を見る