2013-07-30 2 views
0

Как выполнить запрос замены только в конце строки, где присутствует скрытый CRLF? Нечто подобное, но только в конце строки не где-нибудь в пределах строкиСинтаксис T-SQL для удаления CR LF только в END текстовой строки

declare @NewLine char(2) 
set @NewLine=char(13)+char(10) 
update tableName 
    set columnName =Replace(columnName , @NewLine,'') 
where (RIGHT(columnName ,2)[email protected]) 

Некоторые строки имеют несколько абзацев, поэтому CR ЛФ в порядке, просто не в конце строки текста.

Приведенный выше код по-прежнему заменяет CR LF по всей строке.

SQL Server 2008 R2 Экспресс

UPDATE: Самое недавнее тестирование предложенных ответов показал, что в SSMS в CRLFs по всей видимости, остаются в середине строки, но после копирования содержимого в Excel и запуск Сравнение ACSII по каждому символу не содержит CRLF, которые, по-видимому, были преобразованы в пробелы. Я тестировал этот код и экспортировал результаты в текстовый файл и CSV.

create table #t(t varchar(400)) 
insert into #t values('abc'+char(13)+char(10)+'xyz'+char(13)+char(10)) 
insert into #t values('rrrrr'+char(13)+char(10)+'sssss'+char(13)+char(10)) 
insert into #t values('Sentence1 

Sentence2! 

Sentence3 
') 
insert into #t values('rrrrr'+char(13)+char(10)) 
insert into #t values('Sentence111 

Sentence222 
') 
insert into #t values('abc1234'+char(13)+char(10)+char(13)+char(10)+'xyz987'+char(13)+char(10)+char(13)+char(10)+'lmnop345'+char(13)+char(10)) 

declare @NewLine char(2) 
set @NewLine=char(13)+char(10) 

select len(t),t from #t 

update #t 
set t = STUFF(t, LEN(t)-1, 2,'') 
    where (RIGHT(t ,2)[email protected]) 

select len(t),t from #t 

drop table #t 

Я, вероятно, что-то делаю неправильно, но не знаю, что еще попробовать в этой точке.

+0

Я не думаю, что SQL - это лучшее, что можно сделать, но если вы упорствуете, вы можете попробовать SUBSTRING в сочетании с LEN. –

+0

Я изучал этот вариант. Тем не менее, я все еще ничего не работаю. – htm11h

ответ

5

Не используйте REPLACE, используйте STUFF

declare @NewLine char(2) 
set @NewLine=char(13)+char(10) 
update tableName 
set columnName = STUFF(columnName, LEN(columnName)-1, 2,'') 
where (RIGHT(columnName ,2)[email protected]) 
+0

Тот же вопрос, что и предлагаемый выше ответ. Я не верю, что этот код работает. По-видимому, он оставляет CRLF в средней строке при удалении CRLF из конца строки, но сравнение символов ASCII показывает, что они были удалены и изменены в пробелы. – htm11h

+0

Затем происходит что-то еще. STUFF заменяет символы только в одной выделенной позиции. Уверены, что их нет в середине? Вы уверены, что ничего другого не происходит между ними? –

+0

Я публикую обновление с образцом через несколько минут. – htm11h

1

REPLACE не путь на этом. У вас есть несколько вариантов, включая STUFF, SUBSTRING и LEFT. Реализация для LEFT выглядит следующим образом:

declare @NewLine char(2) 
set @NewLine=char(13)+char(10) 
update tableName 
    set columnName = LEFT(columnName, LEN(columnName) - 1) 
where (RIGHT(columnName ,2)[email protected]) 

Надеюсь, это поможет.

+0

Я не верю, что этот код работает. По-видимому, он оставляет CRLF в средней строке при удалении CRLF из конца строки, но сравнение символов ASCII показывает, что они были удалены и изменены в пробелы. – htm11h

+0

Если вы вставляете результаты в Excel (при условии, что вы обновляете исходное сообщение), это может быть Excel, управляющий строкой во время процесса вставки. Я видел это раньше. Вы можете использовать «CHARINDEX» для поиска результатов для оставшегося CRLF. – rhoadsce

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

  • Нет связанных вопросов^_^