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

Откуда:
Сообщений: 358
Как удалить указаный символ в конце строки?

Есть строка "#dsfdfsdf#lklfdsfsdf###" еужно удалить в конце все символы #, так что юы получить:

"#dsfdfsdf#lklfdsfsdf"
12 авг 09, 16:27    [7529150]     Ответить | Цитировать Сообщить модератору
 Re: Удаление указаных символов в конце строки  [new]
ChA
Member

Откуда: Москва
Сообщений: 10989
В качестве идеи
SELECT REPLACE(RTRIM(REPLACE('#dsfdfsdf#lklfdsfsdf###','#',' ')), ' ', '#')
12 авг 09, 16:31    [7529192]     Ответить | Цитировать Сообщить модератору
 Re: Удаление указаных символов в конце строки  [new]
Паганель
Member

Откуда: Винница
Сообщений: 22552
declare @s varchar(255)
set @s = '#dsfdfsdf#lklfdsfsdf###'
--set @s = '#dsfdfsdf#lklfdsf sdf###'
--set @s = 'jj'
--set @s = ''

select reverse(substring(reverse(@s), patindex('%[^#]%', reverse(@s)), 8000)) as result

result
--------------------
#dsfdfsdf#lklfdsfsdf

(1 row(s) affected)
12 авг 09, 16:36    [7529242]     Ответить | Цитировать Сообщить модератору
 Re: Удаление указаных символов в конце строки  [new]
iap
Member

Откуда: Москва
Сообщений: 46975
ChA
В качестве идеи
SELECT REPLACE(RTRIM(REPLACE('#dsfdfsdf#lklfdsfsdf###','#',' ')), ' ', '#')
А в этом случае что будет?
SELECT REPLACE(RTRIM(REPLACE('#dsfdfsdf#lklfdsfsdf    ###','#',' ')), ' ', '#')
Исходные пробелы должны, наверно, остаться?
12 авг 09, 16:42    [7529299]     Ответить | Цитировать Сообщить модератору
 Re: Удаление указаных символов в конце строки  [new]
stavelot
Member

Откуда:
Сообщений: 358
ChA
В качестве идеи
SELECT REPLACE(RTRIM(REPLACE('#dsfdfsdf#lklfdsfsdf###','#',' ')), ' ', '#')


НЕ пойдет, попробуйте добавить к концу строки пробел и у вас все равно будет происходить триминг
12 авг 09, 16:45    [7529328]     Ответить | Цитировать Сообщить модератору
 Re: Удаление указаных символов в конце строки  [new]
ChA
Member

Откуда: Москва
Сообщений: 10989
iap
Исходные пробелы должны, наверно, остаться?
ChA
В качестве идеи
12 авг 09, 16:46    [7529330]     Ответить | Цитировать Сообщить модератору
 Re: Удаление указаных символов в конце строки  [new]
ChA
Member

Откуда: Москва
Сообщений: 10989
stavelot
НЕ пойдет, попробуйте добавить к концу строки пробел и у вас все равно будет происходить триминг
А если подумать ? Впрочем, Паганель вам уже набросал другой вариант...
12 авг 09, 16:47    [7529346]     Ответить | Цитировать Сообщить модератору
 Re: Удаление указаных символов в конце строки  [new]
iap
Member

Откуда: Москва
Сообщений: 46975
ChA
iap
Исходные пробелы должны, наверно, остаться?
ChA
В качестве идеи
Просто, наверно, надо начать с замены существующих пробелов на какой-нибудь
экзотический символ, например, CHAR(1). А в конце заменить обратно на пробелы.
12 авг 09, 16:58    [7529430]     Ответить | Цитировать Сообщить модератору
 Re: Удаление указаных символов в конце строки  [new]
ChA
Member

Откуда: Москва
Сообщений: 10989
iap
Просто, наверно, надо начать с замены существующих пробелов на какой-нибудь экзотический символ, например, CHAR(1). А в конце заменить обратно на пробелы.
Ну, например, если вдруг в конце строки обязательно надо сохранить пробелы, что необходимо достаточно редко, или заменить пробел на пробел с терминальным символом, а потом, аналогично, вернуть "взад".
12 авг 09, 17:12    [7529523]     Ответить | Цитировать Сообщить модератору
 Re: Удаление указаных символов в конце строки  [new]
Дедушка
Member

Откуда: Город трёх революций
Сообщений: 5111
без reverse:
declare @str varchar(50)
select @str='#dsfdfsdf#lklfdsfsdf###'

select left(@str ,patindex('%[a-z]#[^a-z]%',@str))
12 авг 09, 17:14    [7529536]     Ответить | Цитировать Сообщить модератору
 Re: Удаление указаных символов в конце строки  [new]
iap
Member

Откуда: Москва
Сообщений: 46975
Дедушка
без reverse:
declare @str varchar(50)
select @str='#dsfdfsdf#lklfdsfsdf###'

select left(@str ,patindex('%[a-z]#[^a-z]%',@str))
А так что будет?
declare @str varchar(50)
select @str='#dsfdfsdf#lklfdsfsdf#'

select left(@str ,patindex('%[a-z]#[^a-z]%',@str))
12 авг 09, 17:19    [7529568]     Ответить | Цитировать Сообщить модератору
 Re: Удаление указаных символов в конце строки  [new]
Дедушка
Member

Откуда: Город трёх революций
Сообщений: 5111
iap
Дедушка
без reverse:
declare @str varchar(50)
select @str='#dsfdfsdf#lklfdsfsdf###'

select left(@str ,patindex('%[a-z]#[^a-z]%',@str))
А так что будет?
declare @str varchar(50)
select @str='#dsfdfsdf#lklfdsfsdf#'

select left(@str ,patindex('%[a-z]#[^a-z]%',@str))

да... это я не прав :) но собственно тогда:
select
left(@str,
	case when patindex('%#[^a-z]%', @str)-1<>-1 then patindex('%#[^a-z]%', @str)-1
		when patindex('%#', @str)-1<>-1 then patindex('%#', @str)-1
		else len(@str)
	end
)
это правда без пробелов в конце, но пробелы добавить не сложно.
12 авг 09, 17:53    [7529820]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить