Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
T-SQL将多个值替换为通配符_Sql_String_Sql Server 2008_Replace_Wildcard - Fatal编程技术网

T-SQL将多个值替换为通配符

T-SQL将多个值替换为通配符,sql,string,sql-server-2008,replace,wildcard,Sql,String,Sql Server 2008,Replace,Wildcard,我想替换字符和/。我可以这样做: DECLARE @OMG VARCHAR(200) SET @OMG = 'ABC,DE/F' SELECT REPLACE(REPLACE(@OMG,'/','|') ,',','|') 但是,第二个查询不起作用。是否只是输入错误或此代码无法完成任务?我想对应该被替换的字符集使用通配符 SELECT REPLACE(@OMG,[,/],'|') 它返回: Msg 207, Level 16, State 1, Line 7 Invalid column n

我想替换字符和/。我可以这样做:

DECLARE @OMG VARCHAR(200)
SET @OMG = 'ABC,DE/F'
SELECT REPLACE(REPLACE(@OMG,'/','|') ,',','|')
但是,第二个查询不起作用。是否只是输入错误或此代码无法完成任务?我想对应该被替换的字符集使用通配符

SELECT REPLACE(@OMG,[,/],'|')
它返回:

Msg 207, Level 16, State 1, Line 7
Invalid column name ',/'.

您可以定义要替换的所有变量,表内的替换使用它

create  TABLE #ReplaceStrings (symb VARCHAR(5),replace_char varchar(5))

INSERT INTO #ReplaceStrings
            (symb,replace_char)
VALUES      ('/','|'),(',','|')

DECLARE @OMG VARCHAR(200)

SET @OMG = 'ABC,DE/F'

SELECT @OMG = Replace(@OMG, symb, replace_char)
FROM   #ReplaceStrings

select @OMG
在这里,在一次替换中,您可以替换所有不需要的字符

更新:替换表中的数据

create  TABLE ReplaceStrings (symb VARCHAR(5),replace_char varchar(5))
create  table #table (String varchar(500))
insert into #table values ('ABC,DE/F'),('AB,C,DE/F/')
INSERT INTO ReplaceStrings VALUES ('/','|'),(',','|')
标量函数

执行函数

select String,dbo.replacechar(String) Replaced_String from #table 

第二种选择?你是说第二次替换吗?这对我有用。你能把你期望的和你得到的打印出来吗?@DLeh我想他指的是第二个问题。我打赌他试图简化REPLACE命令,以便不将第一次调用REPLACE的结果作为参数传递,因此他希望一次性替换'and'。我更新了答案。@DNac不幸的是,这不正确,我想知道REPLACE函数是否可以同时处理所有要替换的字符。谢谢。这很好,谢谢你的回答。顺便问一下,查询知道应该使用ReplaceStrings中的两行是如何发生的?执行计划是什么?我想了解它的原理。@DNac字符串在此查询中将被替换两次。第一行/将被替换,第二行将被替换。始终将最后一行指定给string@OMG那么将得到最终替换的字符串,并且不需要指定任何类型的循环?SQL知道自己应该循环整个ReplaceStrings表?@DNac-不,您不必循环。ReplaceStrings临时表中的所有字符都将被替换。好的,最后一个问题:如果我有其他表中的数据,如何将其与此解决方案联接?例如,从TST中选择*将给我ABC、DE/F。我仍然可以将其连接到带有临时表的解决方案吗?
select String,dbo.replacechar(String) Replaced_String from #table