powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Заменить символ в строке
11 сообщений из 11, страница 1 из 1
Заменить символ в строке
    #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
Заменить символ в строке
    #39824142
Ролг Хупин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
решил, [ маскируется. а ] не маскируется
...
Рейтинг: 0 / 0
Заменить символ в строке
    #39824229
iap
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ролг Хупинно не заменять, если он в скобках[$]А он не один в квадратных скобок, а среди множества символов, которые все внутри скобок?
...
Рейтинг: 0 / 0
Заменить символ в строке
    #39824234
iap
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ролг Хупин
Код: sql
1.
and @str not like  N'%\[$\]%'

Обратный слэш, по-вашему, что здесь означает?
Я имею в виду, а где же ESCAPE??
...
Рейтинг: 0 / 0
Заменить символ в строке
    #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
Заменить символ в строке
    #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
Заменить символ в строке
    #39824774
Ролг Хупин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iapРолг Хупин
Код: sql
1.
and @str not like  N'%\[$\]%'

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

Можно без ESCAPE, но в первом месыдже не правильно, с этого начался вопрос и терзания.
типа такого:
Код: sql
1.
and @str not like  N'%[[$]%'
...
Рейтинг: 0 / 0
Заменить символ в строке
    #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
Заменить символ в строке
    #39824932
L_argo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А чо сначала не
1. заменить [$] на что-либо
2. потом заменить $
3. а потом вернуть взад [$]
4 (профит)

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

А ?

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


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