Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Как убрать двойные переводы строк и в конце поля совсем убрать перевод строки?  [new]
Serg58
Member

Откуда:
Сообщений: 65
Здравствуйте.

Пользователи в программе вводят текст в поле, очень часто вводят несколько перевод строк, что очень некрасиво потом выглядит.

Исходников программы нет, но я нашёл используемую хранимую процедуру, которая вносит данные из программы в БД.

Там переменная:
@text NTEXT

в которой содержится текст для дальнейшей записи в БД.

Вот хочу сделать следующее:
@text = LTRIM(RTRIM(@text))   -- убираем пробелы
@text = REPLACE(@text, char(10)+char(13)+char(10)+char(13), char(10)+char(13)) -- двойные переводы строк меняем на одинарные


Таким образом в переменной уберём по краям пробелы и двойные перевод строк.

Как теперь в конце переменной проверить перевод строки там или нет? И если там перевод строки - вырезать его(и только его, т.к. перевод строк в основном тексте убирать нельзя).
18 май 16, 11:03    [19187677]     Ответить | Цитировать Сообщить модератору
 Re: Как убрать двойные переводы строк и в конце поля совсем убрать перевод строки?  [new]
AlanDenton
Member [скрыт]

Откуда:
Сообщений: 1004
WHERE RIGHT(@txt, 2) = CHAR(10) + CHAR(13)
18 май 16, 11:09    [19187702]     Ответить | Цитировать Сообщить модератору
 Re: Как убрать двойные переводы строк и в конце поля совсем убрать перевод строки?  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31964
Serg58
Как теперь в конце переменной проверить перевод строки там или нет? И если там перевод строки - вырезать его(и только его, т.к. перевод строк в основном тексте убирать нельзя).
Ну, так и сделать, как вы сами описали.

Найти в конце поля перевод строки, если он есть, то убрать.
Какая из команд вызывает трудности?
Найти можно условием LIKE, убрать командой LEFT
18 май 16, 11:25    [19187772]     Ответить | Цитировать Сообщить модератору
 Re: Как убрать двойные переводы строк и в конце поля совсем убрать перевод строки?  [new]
invm
Member

Откуда: Москва
Сообщений: 9836
Serg58
@text = REPLACE(@text, char(10)+char(13)+char(10)+char(13), char(10)+char(13)) -- двойные переводы строк меняем на одинарные
А если в исходнике есть тройные, четверные и т.д. придется в цикле выполнять.

Все в одном и без циклов:
select
 @text = stuff(t.s, len(t.s) - 2, case when right(t.s, 2) = char(10) + char(13) then 2 else 0 end, '')
from
 (select replace(ltrim(rtrim(@text)), char(13) + char(10), '')) t(s);
18 май 16, 11:44    [19187853]     Ответить | Цитировать Сообщить модератору
 Re: Как убрать двойные переводы строк и в конце поля совсем убрать перевод строки?  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
Serg58,

во-первых, переменных типа NTEXT не бывает. Бывают, однако, параметры процедур этого типа.
Во-вторых, не все строковые функции могут правильно работать с типом NTEXT.
В-третьих, если сервер новее, чем SQL 2000, то надо перейти на тип NVARCHAR(MAX),
хотя я сомневаюсь, что вам действительно нужна длина больше 4000.
В-четвёртых, вы не "убираете по краям пробелы и двойные перевод строк".
Ибо если идут подряд 4 перевода строк, то после ваших манипуляций их останется 2, а не 1!

Кстати, если строка юникодная, то корректнее применять NCHAR(13) и NCHAR(10).

SELECT REPLACE(REPLACE(REPLACE(REPLACE(S,NCHAR(10)+NCHAR(10),NCHAR(10)+NCHAR(13)),NCHAR(13)+NCHAR(10),''),NCHAR(13),''),NCHAR(10),NCHAR(10)+NCHAR(13))
FROM
(
 SELECT LTRIM(RTRIM(STUFF(S,1,PATINDEX(N'%[^'+NCHAR(10)+N']%',S)-1,N'')))
 FROM
 (
  SELECT REVERSE(STUFF(REVERSE(S),1,PATINDEX(N'%[^'+NCHAR(10)+N']%',REVERSE(S))-1,N''))
  FROM (SELECT REPLACE(@text,NCHAR(13),NCHAR(10)))T(S)
 )T(S)
)T(S);
18 май 16, 11:48    [19187859]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить