Oracleの文字列連結演算子とは何ですか?


回答:


236

それは||、例えば:

select 'Mr ' || ename from emp;

私が考えることができる唯一の「興味深い」機能'x' || null'x'nullあなたがおそらく期待するようなものではなく、リターンであるということです。


3
私は論理演算からnullを期待します...文字列演算について考えたことはありません。

1
もちろん、Oracleはnullと ''を同じものとして扱い、 'x' ||を扱います。'' = 'x'は理にかなっています。しかし、nullを「未定義」または「不明」と考える場合、 'x' || nullは 'x'で始まる任意の文字列であり、それ自体は「不明」です。
トニーアンドリュース

4
||Oracleでは、論理演算子ではないため、を'x'||null返しますx
は、Ilja

3
@ipip:私は混乱しています-「論理演算子」とはANDNOTなどの演算子を意味する場合、もちろん||論理演算子ではありません。しかし、それは'x'||null戻ることで何をしなければならないのxですか? n+nullnullを返すので+、論理演算子ですか?
トニーアンドリュース

2
連結のヌルのOracleの取り扱いは、それがSQL92仕様(とPostgresの)に異なっていることで、非標準である-を参照してpostgresql.org/message-id/921.1144705646@sss.pgh.pa.us
beldaz

61

concatもありますが、あまり使われていません

select concat('a','b') from dual;

6
これは||よりもずっと良いです シンボル。||を使用しています ||の他の言語での使用と同様に、混乱しています。
ジョーダン

17
明確にするために同意しましたが、|| 2つ以上のフィールドを簡単に許可できるという利点があります
Patrick Honorez、2014年

3
CONCAT他のDBMS(少なくともMySQLとPostgres)とも互換性があります。
lapo

1
ANSI SQL委員会が2つ以上のものを連結する必要があるかもしれないとは思いませんでした。(同じことを思いついたOracleの天才にも当てはまりますnvl()。)
William Robertson

1
CONCATMicrosoft SQL Server 2012以降でも利用できます。CONCATは非標準ですが、コードを移植可能にしたい場合は間違いなく使用する方法です。(||実際のANSI標準演算子ですが、サポートを確認してもわかりません!)
マットギブソン

11

|| 2つの文字列を処理するときは、連結を提案します。これらの文字列が2を超える場合:

select concat(a,b)
  from dual

または

  select 'a'||'b'||'c'||'d'
        from dual

2
申し訳ありませんが、私は、これは2年前だった実現していますが、その理由を好むconcat(a,b)オーバーa||b
トニーアンドリュース

|| より短く、より柔軟で、シンプルです。彼のselectステートメントを見てください。
JoshYates1980 2018

6
DECLARE
     a      VARCHAR2(30);
     b      VARCHAR2(30);
     c      VARCHAR2(30);
 BEGIN
      a  := ' Abc '; 
      b  := ' def ';
      c  := a || b;
 DBMS_OUTPUT.PUT_LINE(c);  
   END;

出力:: Abc def


1

3 CONCAT(CONCAT(,),)つ以上の文字列を連結する場合、使用するとうまくいきました。

私の問題は、日付文字列(のみ)を操作YYYYMMDDYYYY-MM-DD、次のように(つまり、日付形式に変換せずに)作成する必要がありました。

CONCAT(CONCAT(SUBSTR(DATECOL,1,4),SUBSTR(DATECOL,6,2)),SUBSTR(DATECOL,9,2)) AS YYYYMMDD
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.