SQL Server 2008 R2에서 CONCAT 함수를 어떻게 사용합니까?


102

CONCATSQL Server 2008 R2에서 함수를 찾고있었습니다 . 나는 이 기능에 대한 링크를 발견 . 하지만이 기능을 사용하면 다음과 같은 오류가 발생합니다.

메시지 195, 수준 15, 상태 10, 줄 7
'CONCAT'은 인식 된 기본 제공 함수 이름이 아닙니다.

합니까 CONCAT기능은 SQL 서버 2008 R2에 존재?

그렇지 않은 경우 SQL Server 2008 R2에서 문자열을 어떻게 연결합니까?


@Oded 나는 stmt를 실행하려고 시도합니다-concat ( 'b', 'a') 선택
Mitesh Budhabhatti

1
@marc_s : 문서는 SQL 서버 2012의 몇 가지 표시를 가지고 있지만 표시가 없습니다 CONCAT입니다 새로운 2012 년을위한
게이브

1
간접적으로 2012 년이라는 것을 나타내지 만 페이지는 UI 디자인이 좋지 않습니다. 이전 버전에서 기능을 사용할 수있는 페이지에는 읽고있는 문서의 버전 바로 옆에 드롭 다운이 있습니다. 이것을 안다면 2012 년에만 해당된다는 것을 알고 있습니다. 당신이 그것을 몰랐다면 당신은 Mitesh와 같은 상황에 처하게됩니다.
John

답변:


70

CONCAT제공 한 링크는 2008 R2를 포함한 이전 버전 의 기능이 아닙니다 .

SQL Server 2012의 일부라는 것은 문서 트리에서 볼 수 있습니다.

SQL Server 2012  
Product Documentation  
Books Online for SQL Server 2012  
Database Engine  
  Transact-SQL Reference (Database Engine)  
    Built-in Functions (Transact-SQL)  
      String Functions (Transact-SQL)  

편집 Martin Smith는 SQL Server가 ODBC CONCAT기능 구현을 제공 한다고 유용하게 지적 합니다 .


26
SELECT {fn concat ('foo', 'bar')};이전 버전에서 사용할 수 있습니다 . 하지만 2 개의 매개 변수 만 허용합니다.
Martin Smith

6
아니면 그냥 +연산자를 사용하세요. @ lynn-langit이 그녀의 대답에서 언급 했듯이 , 저는 받아 들여진 대답 만 읽었 기 때문에 처음에는 완전히 놓쳤습니다 ...
Svish

7
@Svish +동작합니다 다르게에 대한 결과 SELECT 'A' + 'B' + 'C'SELECT CONCAT('A', 'B', 'C')SELECT 'A' + 'B' + NULLSELECT CONCAT('A', 'B', NULL)입니다 ABC, ABC, NULL,AB
ta.speot.is

@ ta.speot.is 반갑습니다! 내 경우의 사례는 없었지만 NULL, 그렇게 +큰 :) 일
Svish

이 대답은 더하기 기호를 대신 사용해야하는 정보가 포함 된 경우 훨씬 더 유용합니다. 커뮤니티는 그 의견을 확인합니다. @LynnLangit의 답변의 찬성표를 비교합니다. OP "SQL Server 2008 R2에서 문자열을 어떻게 연결합니까?"라고 물었습니다.
Honza Zidek

101

완전성을 위해-SQL 2008에서는 더하기 +연산자를 사용하여 문자열 연결을 수행합니다.

샘플 코드와 함께 MSDN 참조 를 살펴보십시오 . SQL 2012부터는 새로운 CONCAT 함수 를 사용할 수 있습니다 .


46

연결하기 전에 모든 열을 캐스팅하는 것이 좋습니다.

cast('data1' as varchar) + cast('data2' as varchar) + cast('data3' as varchar)

이것은 당신을 위해 작동합니다.


6
팁 : varchar 크기가 지정되지 않은 경우 (예 : varchar (50)) sql은 기본값 인 30을 사용합니다. 캐스트되는 변수 / 값이 기본값보다 크면 오류없이 잘립니다.
Swifty

23

언급 된대로 CONCAT은 SQL Server 2012 이전에는 지원되지 않습니다. 그러나 제안 된대로 + 연산자를 사용하여 간단히 연결할 수 있습니다. 그러나이 연산자는 첫 번째 피연산자가 숫자 인 경우 추가되고 연결되지 않을 것이라고 생각하므로 오류가 발생합니다. 이 문제를 해결하려면 앞에 ''를 추가하십시오. 예를 들면

someNumber + 'someString' + .... + lastVariableToConcatenate

오류가 발생하지만 '' + someNumber + 'someString' + ......잘 작동합니다.

또한 연결할 숫자가 두 개인 경우 그 사이에 ''를 추가하십시오.

.... + someNumber + '' + someOtherNumber + .....

감사합니다. 열 목록에서 ''+ f.columnName + ''를 사용하면 효과가 있습니다!
Luke

2
@kuklei SQL 서버에서 SELECT 'varchar(' + 5 + ')'"nvarchar 값 'varchar ('를 데이터 유형 int로 변환 할 때 변환이 실패했습니다."라는 오류가 발생하므로 대답이 유지되지 않는 것 같습니다.
Alexander

5

SQL Server 2012 CONCAT 함수에 대한 대체 근사치의 NULL 안전 드롭

SQL Server 2012 :

SELECT CONCAT(data1, data2)

PRE SQL 2012 (두 가지 솔루션) :

SELECT {fn CONCAT(ISNULL(data1, ''), ISNULL(data2, ''))}

SELECT ISNULL(CAST(data1 AS varchar(MAX)), '') + ISNULL(CAST(data2 AS varchar(MAX)), '')

이 두 가지 솔루션은 @Martin Smith, @Svish 및 @ vasin1987을 포함한 다른 포스터에서 제기 한 몇 가지 훌륭한 답변과 경고를 수집합니다.

이러한 옵션은 특정 피연산자와 관련된 연산자 의 다양한 동작을 고려하면서 안전한 처리를 위해 (빈 문자열) 캐스팅에 추가 NULL됩니다 .''NULL+

노트 ODBC 스케일러 기능 반면 용액의 인자로 제한 +연산자 필요한 접근은 많은 인수로 확장된다.

varchar여기에서 해결 된 기본 크기 와 관련하여 @Swifty에서 식별 한 잠재적 인 문제에 유의 하십시오 varchar(MAX).


3
(city + ', ' + state + ' ' + zip) as ctstzip for select
(city + ', ' + state + ' ' + zip) for insert

필드 유형이 다른 경우에만 캐스트 또는 변환하십시오.

삽입 할 때 값을 삽입해야하는 올바른 위치에 있어야합니다. "as"를 사용하면 오류가 발생합니다.

Insert into testtable (ctstzip) Values ((city + ', ' + state + ' ' + zip))

2

예, 함수는 SQL 2008에 없습니다. 캐스트 연산을 사용하여 수행 할 수 있습니다.

예를 들어 우리는 employee테이블이 있고 당신 nameapplydate .

그래서 당신은 사용할 수 있습니다

Select   cast(name as varchar) + cast(applydate as varchar) from employee

concat 기능이 작동하지 않는 곳에서 작동합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.