Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Заменить символ в строке / 11 сообщений из 11, страница 1 из 1
07.06.2019, 15:45
    #39824125
Ролг Хупин
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Заменить символ в строке
Как заменить символ $ в строке на ^, но не заменять, если он в скобках[$]

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

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
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'%\[$\]%'
...
Рейтинг: 0 / 0
07.06.2019, 16:09
    #39824142
Ролг Хупин
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Заменить символ в строке
решил, [ маскируется. а ] не маскируется
...
Рейтинг: 0 / 0
07.06.2019, 18:03
    #39824229
iap
iap
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Заменить символ в строке
Ролг Хупинно не заменять, если он в скобках[$]А он не один в квадратных скобок, а среди множества символов, которые все внутри скобок?
...
Рейтинг: 0 / 0
07.06.2019, 18:07
    #39824234
iap
iap
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Заменить символ в строке
Ролг Хупин
Код: sql
1.
and @str not like  N'%\[$\]%'

Обратный слэш, по-вашему, что здесь означает?
Я имею в виду, а где же ESCAPE??
...
Рейтинг: 0 / 0
10.06.2019, 05:36
    #39824728
Kopelly
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Заменить символ в строке
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
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'%[[]$]%'



А вообще алгоритм не учитывает, что в строке может быть и "$", и "[$]" одновременно
...
Рейтинг: 0 / 0
10.06.2019, 07:13
    #39824739
aleks222
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Заменить символ в строке
Kopelly
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
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'%[[]$]%'



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

Код: sql
1.
2.
3.
4.
5.
6.
declare @subst nvarchar(64) = N'[[[бакс]]]';
declare @str nvarchar(100) = N'e$alon$[$]';
select @str, REPLACE(REPLACE(REPLACE( @str
             , N'[$]', @subst )
             , N'$', N'^' )
             , @subst, N'[$]')
...
Рейтинг: 0 / 0
10.06.2019, 09:16
    #39824774
Ролг Хупин
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Заменить символ в строке
iapРолг Хупин
Код: sql
1.
and @str not like  N'%\[$\]%'

Обратный слэш, по-вашему, что здесь означает?
Я имею в виду, а где же ESCAPE??

Можно без ESCAPE, но в первом месыдже не правильно, с этого начался вопрос и терзания.
типа такого:
Код: sql
1.
and @str not like  N'%[[$]%'
...
Рейтинг: 0 / 0
10.06.2019, 13:33
    #39824929
Сруль.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Заменить символ в строке
Несколько навскидку, несколько торопясь
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
--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 
...
Рейтинг: 0 / 0
10.06.2019, 13:38
    #39824932
L_argo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Заменить символ в строке
А чо сначала не
1. заменить [$] на что-либо
2. потом заменить $
3. а потом вернуть взад [$]
4 (профит)

А ?
...
Рейтинг: 0 / 0
10.06.2019, 13:51
    #39824937
Massa52
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Заменить символ в строке
L_argo,
см. выше у aleks222
...
Рейтинг: 0 / 0
10.06.2019, 14:11
    #39824952
Ролг Хупин
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Заменить символ в строке
L_argoА чо сначала не
1. заменить [$] на что-либо
2. потом заменить $
3. а потом вернуть взад [$]
4 (профит)

А ?

тоже вариант, единственное, что надо так же маскировать скобку [, как указано выше.
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Заменить символ в строке / 11 сообщений из 11, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]