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

Откуда: Чебаркуль
Сообщений: 3464
Как заменить символ $ в строке на ^, но не заменять, если он в скобках[$]

В случае 1 должен быть заменен, в 2 - не должен

declare @str nvarchar(MAX)
--1 меняет
select @str = N'ealon$'
select @str, REPLACE(@str,'$','^') where @str like '%$%' and @str not like  N'%\[$\]%'

--2 - меняет, а не надо бы
select @str = N'ealon[$]'
select @str, REPLACE(@str,'$','^') where @str like '%$%' and @str not like  N'%\[$\]%'
7 июн 19, 15:45    [21904650]     Ответить | Цитировать Сообщить модератору
 Re: Заменить символ в строке  [new]
Ролг Хупин
Member

Откуда: Чебаркуль
Сообщений: 3464
решил, [ маскируется. а ] не маскируется
7 июн 19, 16:09    [21904679]     Ответить | Цитировать Сообщить модератору
 Re: Заменить символ в строке  [new]
iap
Member

Откуда: Москва
Сообщений: 46954
Ролг Хупин
но не заменять, если он в скобках[$]
А он не один в квадратных скобок, а среди множества символов, которые все внутри скобок?
7 июн 19, 18:03    [21904814]     Ответить | Цитировать Сообщить модератору
 Re: Заменить символ в строке  [new]
iap
Member

Откуда: Москва
Сообщений: 46954
Ролг Хупин
and @str not like  N'%\[$\]%'
Обратный слэш, по-вашему, что здесь означает?
Я имею в виду, а где же ESCAPE??
7 июн 19, 18:07    [21904821]     Ответить | Цитировать Сообщить модератору
 Re: Заменить символ в строке  [new]
Kopelly
Member

Откуда: Красноярск
Сообщений: 289
declare @str nvarchar(MAX)
--1 меняет
select @str = N'ealon$'
select @str, REPLACE(@str,'$','^') where @str like '%$%' and @str not like  N'%[[]$]%'

--2 - меняет, а не надо бы
select @str = N'ealon[$]'
select @str, REPLACE(@str,'$','^') where @str like '%$%' and @str not like  N'%[[]$]%'


А вообще алгоритм не учитывает, что в строке может быть и "$", и "[$]" одновременно
10 июн 19, 05:36    [21905611]     Ответить | Цитировать Сообщить модератору
 Re: Заменить символ в строке  [new]
aleks222
Member

Откуда:
Сообщений: 855
Kopelly
declare @str nvarchar(MAX)
--1 меняет
select @str = N'ealon$'
select @str, REPLACE(@str,'$','^') where @str like '%$%' and @str not like  N'%[[]$]%'

--2 - меняет, а не надо бы
select @str = N'ealon[$]'
select @str, REPLACE(@str,'$','^') where @str like '%$%' and @str not like  N'%[[]$]%'


А вообще алгоритм не учитывает, что в строке может быть и "$", и "[$]" одновременно


declare @subst nvarchar(64) = N'[[[бакс]]]';
declare @str nvarchar(100) = N'e$alon$[$]';
select @str, REPLACE(REPLACE(REPLACE( @str
             , N'[$]', @subst )
             , N'$', N'^' )
             , @subst, N'[$]')
10 июн 19, 07:13    [21905625]     Ответить | Цитировать Сообщить модератору
 Re: Заменить символ в строке  [new]
Ролг Хупин
Member

Откуда: Чебаркуль
Сообщений: 3464
iap
Ролг Хупин
and @str not like  N'%\[$\]%'
Обратный слэш, по-вашему, что здесь означает?
Я имею в виду, а где же ESCAPE??


Можно без ESCAPE, но в первом месыдже не правильно, с этого начался вопрос и терзания.
типа такого:
and @str not like  N'%[[$]%'
10 июн 19, 09:16    [21905673]     Ответить | Цитировать Сообщить модератору
 Re: Заменить символ в строке  [new]
Сруль.
Member

Откуда:
Сообщений: 119
Несколько навскидку, несколько торопясь
--select dbo.f_dollar_shmolar(N'[$]1234567890$abcd$efgh[$]')
create function dbo.f_dollar_shmolar
(@input nvarchar(200))
returns nvarchar(200)
as
begin
declare @output nvarchar(200)
declare @i int, @length int,@symbol nchar(1)

select @output='',@length=LEN(@input),@i=1

DECLARE @dollar TABLE
(
  symbol nvarchar(1),
  ID int identity
)

while(@i<=@length)
begin
insert into @dollar
values(SUBSTRING(@input,@i,1))

set @i=@i+1
end
---------------------------------------------------------------------------------------------
select @i=1
 while(@i<=@length)
 begin
		select @symbol=symbol from @dollar
		where ID=@i
		
		if @symbol='['
		begin
				while (@symbol<>']')
				begin
				set @output=@output+@symbol
				set @i=@i+1
				if @i>@length return @output
				
				select @symbol=symbol from @dollar
				where ID=@i
				end 
		end
		if @symbol='$' set @output=@output+'^'
		if @symbol<>'$' set @output=@output+@symbol
		set @i=@i+1
 end
---------------------------------------------------------------------------------------------
return @output
end 
10 июн 19, 13:33    [21905899]     Ответить | Цитировать Сообщить модератору
 Re: Заменить символ в строке  [new]
L_argo
Member

Откуда:
Сообщений: 1139
А чо сначала не
1. заменить [$] на что-либо
2. потом заменить $
3. а потом вернуть взад [$]
4 (профит)

А ?
10 июн 19, 13:38    [21905906]     Ответить | Цитировать Сообщить модератору
 Re: Заменить символ в строке  [new]
Massa52
Member

Откуда:
Сообщений: 373
L_argo,
см. выше у aleks222
10 июн 19, 13:51    [21905914]     Ответить | Цитировать Сообщить модератору
 Re: Заменить символ в строке  [new]
Ролг Хупин
Member

Откуда: Чебаркуль
Сообщений: 3464
L_argo
А чо сначала не
1. заменить [$] на что-либо
2. потом заменить $
3. а потом вернуть взад [$]
4 (профит)

А ?


тоже вариант, единственное, что надо так же маскировать скобку [, как указано выше.
10 июн 19, 14:11    [21905937]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить