7

Как вставить перенос строки в строке VARCHAR/NVARCHAR SQL Server

2

Я не нашел никаких похожих вопросов по этой теме, и мне пришлось провести исследование для работы над одним проектом. Решил опубликовать ответ здесь на случай, если кто-то столкнется с такой же проблемой.

5 ответ(ов)

7

char(13) представляет собой символ возврата каретки (CR). Для использования разрывов строки в стиле DOS/Windows, которые требуют сочетания CRLF, вам нужно использовать char(13) и char(10) вместе. Это можно сделать следующим образом:

'Это первая строка.' + CHAR(13) + CHAR(10) + 'Это вторая строка.'

Таким образом, вы получите правильный перенос строки.

3

Я нашёл ответ здесь: http://blog.sqlauthority.com/2007/08/22/sql-server-t-sql-script-to-insert-carriage-return-and-new-line-feed-in-code/

Вы можете просто конкатенировать строку и вставить CHAR(13) в том месте, где хотите добавить перенос строки.

Пример:

DECLARE @text NVARCHAR(100)
SET @text = 'Это строка 1.' + CHAR(13) + 'Это строка 2.'
SELECT @text

Это выведет следующее:

Это строка 1. Это строка 2.

1

Другой способ сделать это выглядит следующим образом:

INSERT CRLF SELECT 'fox 
jumped'

То есть, просто добавив перенос строки в вашем запросе во время его написания, вы добавите подобный перенос в базу данных. Это работает в SQL Server Management Studio и Query Analyzer. Я полагаю, что это также будет работать в C#, если вы используете символ @ в строках.

string str = @"INSERT CRLF SELECT 'fox 
    jumped'";
0

Когда вы запускаете этот код в SQL Server Management Studio (SSMS), он демонстрирует, как переносы строки в самом SQL становятся частью строковых значений, занимающих несколько строк:

PRINT 'Строка 1
Строка 2
Строка 3'
PRINT ''

PRINT 'Какова длина пустого переноса строки?'
PRINT LEN('
')
PRINT ''

PRINT 'Каковы ASCII значения?'
PRINT ASCII(SUBSTRING('
',1,1))
PRINT ASCII(SUBSTRING('
',2,1))

Результат будет следующим:

Строка 1

Строка 2

Строка 3  

Какова длина пустого переноса строки?

2  

Каковы ASCII значения?

13

10  

Если вы предпочитаете указать вашу строку в одной строке (почти!), вы можете воспользоваться функцией REPLACE(), как показано ниже (по желанию можно использовать CHAR(13)+CHAR(10) в качестве замены):

PRINT REPLACE('Строка 1`Строка 2`Строка 3','`','
')

Таким образом, можно легко управлять переносами строк в строковых значениях, как их отображение, так и длину.

0

Вы можете использовать функцию concat, чтобы объединить строки с символом новой строки. Например, можно сделать так:

concat('Это строка 1.', 0xd0a, 'Это строка 2.')

или же, если вы работаете с Unicode, то так:

concat(N'Это строка 1.', 0xd000a, N'Это строка 2.')

Оба примера объединяют строки и вставляют символ новой строки между ними.

Чтобы ответить на вопрос, пожалуйста, войдите или зарегистрируйтесь