dポイントプレゼントキャンペーン実施中!

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

A 回答 (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文を再度、実行して結果の違いを確認してみてください。
    • good
    • 0
この回答へのお礼

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

お礼日時:2011/04/19 17:56

言語によって関数の書式や演算子の意味が異なることはよくあること


||はMySQLではORですから連結演算子にはつかえません。

http://dev.mysql.com/doc/refman/5.1/ja/extension …

移植性を考慮してのことでしょうけど、すでに定義されているものを
いじるとなるとそちらのケアまで考慮しないといけないので
かえって問題が広がる可能性があることも考慮してください
(つまり素直にCONCATつかいなさい・・・ってことなんですけど)
    • good
    • 0
この回答へのお礼

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

お礼日時:2011/04/19 17:57

質問の意図が分かりません。


どういう理由で、代替手段を必要としているのでしょうか?

まず、MySQLでは、SQLの構文モードが存在します。インストール時の標準設定では、MySQL構文モードになっています。
標準SQLや主要なRDBMSでは、「"」(二重引用符)で囲んだものは、表名や列名などの名前ですが、MySQL構文モードでは、文字定数になります。

一方、標準SQL準拠にするには、SQLモードでANSI構文モードにするといった方法があります。
http://dev.mysql.com/doc/refman/5.1/ja/server-sq …


それ以外には、アプリ側でやるとかいろいろ方法は考えられます。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

関連するカテゴリからQ&Aを探す