Есть ли способ заменять проще?

Всем хорошего дня!
У меня есть потребность проверять значение на наличие символов и если они в нем есть, то заменять их.
Сейчас это делаю так:
select @Name = Name from #T
	set @Name = replace (@Name,'#','_')
	set @Name = replace (@Name,'%','_')
	set @Name = replace (@Name,'&','_')
	set @Name = replace (@Name,'{','_')
	set @Name = replace (@Name,'}','_')
	set @Name = replace (@Name,'\','_')
	set @Name = replace (@Name,'|','_')
	set @Name = replace (@Name,'/','_')
	set @Name = replace (@Name,'>','_')
	set @Name = replace (@Name,'<','_')
	set @Name = replace (@Name,'*','_')
	set @Name = replace (@Name,'?','_')
	set @Name = replace (@Name,'$','_')
	set @Name = replace (@Name,'!','_')
	set @Name = replace (@Name,'''','_')
	set @Name = replace (@Name,'"','_')
	set @Name = replace (@Name,':','_')
	set @Name = replace (@Name,'@','_')
	set @Name = replace (@Name,'+','_')
	set @Name = replace (@Name,'`','_')
	set @Name = replace (@Name,'=','_')
	set @Name = replace (@Name,'-','_')
	set @Name = replace (@Name,'  ',' ')
	set @Name = replace (@Name,'  ',' ')
	set @Name = replace (@Name,'  ',' ')
	set @Name = replace (@Name,char(13),' ')
	set @Name = replace (@Name,char(10),' ')

	select @Name

Может есть какие то способы по проще? Есть идеи?
  • Вопрос задан
  • 85 просмотров
Решения вопроса 1
alex1t
@alex1t
.net developer
Можно.
Первый вариант - replace можно вкладывать как функциональном программировании:
set @Name = replace(replace(replace(@Name,char(10),' '),char(13),' '),'@','_');

Выглядит не очень, но можно разбить по строкам для читабельности.

Второй вариант посложнее, но поинтереснее:
declare @Name varchar(200) = 'abcdefg';

select @Name = replace(@Name, t.c, t.r)
from (
    values ('a','_'),('b','_'),('c','_')
) t(c,r)

print @Name
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы