Oracle의 문자열 연결 연산자는 무엇입니까?


답변:


237

그것은이다 ||예를 들면 :

select 'Mr ' || ename from emp;

내가 생각할 수있는 유일한 "흥미로운"기능 즉 'x' || null반환 'x'하지, null당신은 아마도 예상대로.


3
논리 연산에서 null을 기대할 수 있습니다 ... 문자열 연산에 대해 생각하지 못했습니다.

1
물론 오라클은 null과 ''를 동일하게 취급하고 'x'|| ''= 'x'가 의미가 있습니다. 그러나 null을 "undefined"또는 "unknown"으로 생각하면 'x'|| null은 'x'로 시작하는 문자열 일 수 있으므로 "알 수 없음"입니다!
Tony Andrews

4
||Oracle에서는 논리 연산자가 아니므로를 'x'||null반환합니다 x.
Iľja

3
@ipip : 나는 혼란 스러워요 - 만약 "논리 연산자"당신은 평균 운영자 등에 의해 AND, NOT등 다음 과정의 ||논리 연산자가 아닙니다. 그러나 그것은 'x'||null귀환 으로 인한 것 x입니까? n+nullnull을 반환하므로 +논리 연산자입니까?
Tony Andrews

2
연결에 널 (null)의 오라클의 처리는이 SQL92 사양 (그리고 포스트 그레스)에 다른 것을 비 표준 - 볼 postgresql.org/message-id/921.1144705646@sss.pgh.pa.us
beldaz

61

concat도 있지만 많이 사용되지는 않습니다.

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

6
이것은 ||보다 낫다 상징. || 사용 다른 언어의 || 사용에 따라 혼란 스럽습니다.
Jordan

17
명확성을 위해 동의했지만 || 이 개 필드를 쉽게 더 다음 허용 할 수있는 장점이있다
패트릭 Honorez

3
CONCAT다른 DBMS (최소한 MySQL 및 Postgres) 와도 호환됩니다.
lapo

1
누군가가 두 가지 이상을 연결해야 할 수도있는 ANSI SQL위원회에 발생하지 않았다는 점에서 이상합니다. (동일이 함께했다 오라클의 천재 간다 nvl().)
윌리엄 로버트슨

1
CONCATMicrosoft SQL Server 2012 이상 에서도 사용할 수 있습니다 . 비표준이지만 CONCAT은 코드를 이식 가능하게 만드는 방법입니다. ( ||실제 ANSI 표준 연산자이지만 지원을 통해 알 수는 없습니다!)
Matt Gibson

11

2 개의 문자열을 다룰 때 concat을 제안하고 || 그 문자열이 2 이상인 경우

select concat(a,b)
  from dual

또는

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

2
죄송합니다 나는이 2 년 전이었다 실현,하지만 당신은 왜 선호 concat(a,b)이상 a||b?
Tony Andrews

|| 더 짧고 유연하며 단순합니다. 그의 성명을보십시오.
JoshYates1980

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 데프


1

사용하여 CONCAT(CONCAT(,),)두 개 이상의 문자열을 연결 할 때 날 위해 일했습니다.

내 문제는 날짜 문자열로 작업하고 (만) 다음과 같이 작성해야 YYYYMMDD했습니다 YYYY-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.