2012-05-11 2 views
84

Я искал функцию CONCAT в SQL Server 2008 R2. I found the link for this function. Но когда я использую эту функцию, он дает следующее сообщение об ошибке:Как использовать функцию CONCAT в SQL Server 2008 R2?

Msg 195, Level 15, State 10, Line 7
'CONCAT' is not a recognized built-in function name.

Имеет ли функция CONCAT существует в SQL Server 2008 R2?

Если нет, то как мне связать строки в SQL Server 2008 R2?

+0

@Oded Я просто попробую выполнить stmt - select concat ('b', 'a') –

+0

@marc_s: В документации есть некоторые указания, что это для SQL Server 2012, но нет никаких указаний на то, что 'CONCAT' это * новый * на 2012 год. – Gabe

+1

Он косвенно указывает, что он на 2012 год, но страница плохой дизайн пользовательского интерфейса. На страницах, где функция IS доступна в более старых версиях, выпадаете непосредственно рядом с версией документа, который вы читаете. Если вы это знаете, тогда вы знаете, что это только на 2012 год. Если вы этого не знали, вы попадаете в ту же ситуацию, что и Митеш. – John

ответ

61

CONCAT является новым для SQL Server 2012. Указанная вами ссылка делает это ясным, это не функция на Предыдущие версии, включая 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) 

EDIT Мартин Смит услужливо указывает на то, что SQL Server provides an implementation of ODBC's CONCAT function.

+21

Вы можете использовать 'SELECT {fn concat ('foo', 'bar')};' в предыдущих версиях. Принимает только 2 параметра. –

+5

Или просто используйте оператор '+', как @ lynn-langit упоминает в своем ответе, который я сначала полностью пропустил, потому что я только прочитал принятый ответ ... – Svish

+3

@Svish '+' ведет себя по-другому, результаты для 'SELECT 'A' + 'B' + 'C'' vs 'SELECT CONCAT (' A ',' B ',' C ')' vs 'SELECT' A '+' B '+ NULL' vs' SELECT CONCAT (' A ',' B ', NULL) '' 'ABC',' ABC', 'NULL',' AB' –

92

Для полноты - в SQL 2008 вы использовали бы оператор плюс + для выполнения конкатенации строк.

Посмотрите на MSDN reference с образцом кода. Начиная с SQL 2012, вы можете использовать новый CONCAT function.

21

CONCAT, как указано, не поддерживается до SQL Server 2012. Однако вы можете объединить просто используя оператор +, как было предложено. Но будьте осторожны, этот оператор будет вызывать ошибку, если первый операнд - это число, поскольку он считает, что будет добавлять и не конкатенировать. Чтобы решить эту проблему, просто добавьте «впереди». Например

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

вызовет ошибку НО '' + someNumber + 'someString' + ...... будет работать нормально.

Кроме того, если есть два числа, которые сцепляются убедитесь, что вы добавляете «» между ними, как так

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

Спасибо, используя '' + f.columnName + '' в списке столбцов, работает! – Luke

+2

@kuklei На моем SQL-сервере 'SELECT 'varchar (' + 5 + ')' 'выдает ошибку" Ошибка преобразования при преобразовании значения nvarchar' varchar ('to data type int ", поэтому, я думаю, ваш ответ не – Alexander

34

Я предлагаю вам бросить все колонки, прежде чем Concat их

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

Это должно сработать для вас.

+2

СОВЕТ. Стоит отметить, что если размер varchar не указан, например, varchar (50), то sql будет использовать значение по умолчанию 30. Если переменная/значение, отличное от значения по умолчанию, будет усечено без повышения ошибка. – Swifty

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

Только лить или преобразовать, если какой-либо тип поля отличается от других.

На вставке значение должно быть в нужном месте, в котором вы должны быть вставлены. Использование «как» даст вам сообщение об ошибке.

i.e.

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

NULL безопасно падение замены аппроксимаций для SQL Server 2012 CONCAT Функция

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 Смит, @Svish и @ vasin1987.

Этих вариантов добавить NULL к '' (пустой строке) отливки для безопасного обращения с NULL в то время учета меняющегося поведения + оператора, относящегося к конкретным операндам.

Обратите внимание на ODBC Scaler Function решения ограниченно 2 аргументов в то время как + оператора подхода является масштабируемым многими аргументами по мере необходимости.

Обратите внимание также на потенциальную проблему, идентифицированную @Swifty относительно размера по умолчанию varchar, здесь устраняемого varchar(MAX).

Смежные вопросы