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

Откуда: там, где коллайдер
Сообщений: 360
Хочется получить функцию типа trim ('abcba','a'), которая бы отрезала крайние символы 'a' и возвращала бы 'bcb' ...
4 ноя 03, 19:46    [406351]     Ответить | Цитировать Сообщить модератору
 Re: Как trim'ить определенный символ ?  [new]
Glory
Member

Откуда:
Сообщений: 104760
replace('abcda', 'a', '')

PS
Пора уже, пора открыть BOL в разделе string functions
4 ноя 03, 19:49    [406353]     Ответить | Цитировать Сообщить модератору
 Re: Как trim'ить определенный символ ?  [new]
ura
Member [заблокирован]

Откуда: Киев
Сообщений: 932
автор писал:
Хочется получить функцию типа trim ('abcba','a')

Ну так напиши ее...


а если лень, то вот
create function StrTrim

(@S nvarchar(4000)
,@SIDE int = 0 -- 1- только в начале, 2-только в конце

,@SYMBOL nchar(1) = NULL -- Если NULL - то удаляются пробелы и enter-ы

)
returns nvarchar(4000)
as
/*{ Удаляет символы (по умолчанию - пробелы и enter-ы) в начале и/или в конце строки }*/
begin

declare @B int
,@E int

select @B=1, @E=Len(@S)

if @E=0 set @B=0

if @SIDE<>2 and @E>0
while @B<=@E and substring(@S,@B,1) in (IsNull(@SYMBOL,N' '),IsNull(@SYMBOL,nchar(10)),IsNull(@SYMBOL,nchar(13)))
set @B=@B+1

if @SIDE<>1 and @E>0
while @E>=@B and substring(@S,@E,1) in (IsNull(@SYMBOL,N' '),IsNull(@SYMBOL,nchar(10)),IsNull(@SYMBOL,nchar(13)))
set @E=@E-1

if @E>=0 and @B>0
set @S=SubString(@S,@B,@E-@B+1)
return @S

end
GO
4 ноя 03, 19:51    [406356]     Ответить | Цитировать Сообщить модератору
 Re: Как trim'ить определенный символ ?  [new]
ura
Member [заблокирован]

Откуда: Киев
Сообщений: 932
2 Glory
отрезала крайние символы
4 ноя 03, 19:53    [406358]     Ответить | Цитировать Сообщить модератору
 Re: Как trim'ить определенный символ ?  [new]
EVIL
Member

Откуда: там, где коллайдер
Сообщений: 360
Ure спасибо !
Это я и хотел увидеть ... самому сочинить - мозги сломаю :)
4 ноя 03, 19:56    [406359]     Ответить | Цитировать Сообщить модератору
 Re: Как trim'ить определенный символ ?  [new]
Glory
Member

Откуда:
Сообщений: 104760
substring(@x, 2, datalength(@x)-2)
4 ноя 03, 19:56    [406360]     Ответить | Цитировать Сообщить модератору
 Re: Как trim'ить определенный символ ?  [new]
EVIL
Member

Откуда: там, где коллайдер
Сообщений: 360
нет, Глори, все еще не катит :)
4 ноя 03, 20:05    [406365]     Ответить | Цитировать Сообщить модератору
 Re: Как trim'ить определенный символ ?  [new]
Glory
Member

Откуда:
Сообщений: 104760
Почему ?
4 ноя 03, 20:07    [406367]     Ответить | Цитировать Сообщить модератору
 Re: Как trim'ить определенный символ ?  [new]
EVIL
Member

Откуда: там, где коллайдер
Сообщений: 360
потому что последней командой ты отрезаешь первый и последний символы не взирая на то, какие они. Мне же нужно выкидывать определенный символ ! и не первый и последний, а ПЕРВЫЕ и ПОСЛЕДНИЕ !
4 ноя 03, 20:57    [406408]     Ответить | Цитировать Сообщить модератору
 Re: Как trim'ить определенный символ ?  [new]
Alterran
Guest
При единственном дополнительном предположении, что
в строке отсутстуют пробелы,
это можно сделать так:

replace(ltrim(rtrim(replace(@string, 'a', ' '))), ' ', 'a')
4 ноя 03, 22:43    [406458]     Ответить | Цитировать Сообщить модератору
 Re: Как trim'ить определенный символ ?  [new]
Glory
Member

Откуда:
Сообщений: 104760
2EVIL
потому что последней командой ты отрезаешь первый и последний символы не взирая на то, какие они. Мне же нужно выкидывать определенный символ ! и не первый и последний, а ПЕРВЫЕ и ПОСЛЕДНИЕ !

Из примера на видно ни первое, ни второе. Т.к. отрезано по ОДНОМУ крайнему символу и не скзано что оин должны быть одинаковыми.
4 ноя 03, 23:28    [406482]     Ответить | Цитировать Сообщить модератору
 Re: Как trim'ить определенный символ ?  [new]
doctor
Member

Откуда: Piter
Сообщений: 73
create function cutOFF ( @string nvarchar(4000), @deliver nvarchar(1) )

returns nvarchar(4000)
as
Begin
while left(@string, 1) = @deliver begin
select @string = stuff(@string, 1, 1,'')
end

while right(@string, 1) = @deliver begin
select @string = stuff(@string, len(@string), len(@string),'')
end

return @string
End
go
select dbo.cutOFF('aaaasxsdfsdfsa'),'a')
5 ноя 03, 03:03    [406533]     Ответить | Цитировать Сообщить модератору
 Re: Как trim'ить определенный символ ?  [new]
LexusR
Member

Откуда: Novosibirsk
Сообщений: 1873
LexusR

create function ufTrim(@str varchar(8000), @Count integer)
returns varchar(8000)
as
begin
return(select stuff(stuff(@str,len(@str)-@Count+1,@Count,''),1,@Count,''))
end

select dbo.ufTrim('qwertyu',1),dbo.ufTrim('qwertyu',2)

5 ноя 03, 06:26    [406554]     Ответить | Цитировать Сообщить модератору
 Re: Как trim'ить определенный символ ?  [new]
LexusR
Member

Откуда: Novosibirsk
Сообщений: 1873
LexusR

alter function ufTrim1(@str varchar(8000), @char char(1))
returns varchar(8000)
as
begin
return(select reverse(stuff(reverse(stuff(@str,charindex(@char,@str),1,'')),charindex(@char,reverse(@str)),1,''))
)
end
select dbo.ufTrim1('yqwertyu','y')
5 ноя 03, 06:39    [406556]     Ответить | Цитировать Сообщить модератору
 Re: Как trim'ить определенный символ ?  [new]
SergSuper
Member

Откуда: SPb
Сообщений: 5488

select replace(replace(rtrim(ltrim(replace(replace('asdasd',' ',char(1)),'a',' '))),' ','a'),char(1),' ')
5 ноя 03, 10:06    [406748]     Ответить | Цитировать Сообщить модератору
 Re: Как trim'ить определенный символ ?  [new]
MiCe
Member

Откуда: RUSSIA STAVROPOL Pyatigorsk
Сообщений: 1996
create function ufn_trim

( @s varchar(8000), @c char(1) )
returns varchar(8000)
as
begin
return replace(rtrim(ltrim(replace(@s,@c,' '))),' ',@c)
end
GO
select dbo.StrTrim('aadfgdfggaaasaddfsdfaaaaa','a')
----------------

dfgdfggaaasaddfsdf
5 ноя 03, 10:26    [406805]     Ответить | Цитировать Сообщить модератору
 Re: Как trim'ить определенный символ ?  [new]
tpg
Member

Откуда: Novosibirsk
Сообщений: 23902
2 MiCe

Интересно, а что вернет вот такое выражение?

select dbo.StrTrim('aadfgdfggaa   1   asaddfsdfaaaaa','a')
5 ноя 03, 10:34    [406828]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить