Как объединить текст в запросе на сервере SQL? - PullRequest
77 голосов
/ 10 сентября 2008

Следующий SQL:

SELECT notes + 'SomeText'
FROM NotesTable a 

Дайте ошибку:

Типы данных nvarchar и text несовместимы в операторе добавления.

Ответы [ 6 ]

78 голосов
/ 10 сентября 2008

Единственный способ - преобразовать текстовое поле в поле nvarchar.

Select Cast(notes as nvarchar(4000)) + 'SomeText'
From NotesTable a

В противном случае я предлагаю сделать объединение в вашем приложении.

22 голосов
/ 17 сентября 2008

Возможно, вы также захотите рассмотреть значения NULL. В вашем примере, если столбец notes имеет нулевое значение, полученное значение будет NULL. Если вы хотите, чтобы нулевые значения вели себя как пустые строки (чтобы ответ получался «SomeText»), используйте функцию IsNull:

Select IsNull(Cast(notes as nvarchar(4000)),'') + 'SomeText' From NotesTable a
19 голосов
/ 11 сентября 2008

Если вы используете SQL Server 2005 или выше, в зависимости от размера данных в поле Notes, вы можете рассмотреть приведение к nvarchar (max) вместо приведения к определенной длине, что может привести к обрезанию строки.

Select Cast(notes as nvarchar(max)) + 'SomeText' From NotesTable a
6 голосов
/ 10 сентября 2008

Вы должны явно привести типы строк к одному и тому же, чтобы объединить их. В вашем случае вы можете решить проблему, просто добавив 'N' перед SomeText (N'SomeText '). Если это не сработает, попробуйте Cast ('SomeText' как nvarchar (8)).

4 голосов
/ 31 января 2018

Другой вариант - команда CONCAT :

SELECT CONCAT(MyTable.TextColumn, 'Text') FROM MyTable
2 голосов
/ 15 сентября 2008

Если вы используете SQL Server 2005 (или более позднюю версию), вы можете рассмотреть возможность перехода на NVARCHAR (MAX) в определении таблицы; Типы данных TEXT, NTEXT и IMAGE в SQL Server 2000 будут устаревшими в будущих версиях SQL Server. SQL Server 2005 обеспечивает обратную совместимость с типами данных, но вы, вероятно, должны использовать VARCHAR (MAX), NVARCHAR (MAX) и VARBINARY (MAX).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...