Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.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
在TSql中替换_Tsql_Sql Server 2008 - Fatal编程技术网

在TSql中替换

在TSql中替换,tsql,sql-server-2008,Tsql,Sql Server 2008,我想更新如下格式的行ABC-DEF-GHI-ABD, 使用如下命令更新tbl SET col=Replace(col,@var',)其中Pk=something.如何删除尾随或前导连字符?对于exmaple,如果@var为GHI,则替换后,行值应为ABC-DEF-ABD,或者如果@var为ABC,则值应为DEF-GHI-ABD。如何: UPDATE tbl SET col = replace(replace(col, @var + ' – ', ''), ' – ' + @var, '') 内

我想更新如下格式的行
ABC-DEF-GHI-ABD

使用如下命令
更新tbl SET col=Replace(col,@var',)其中Pk=something.
如何删除尾随或前导连字符?对于exmaple,如果@var为GHI,则替换后,行值应为ABC-DEF-ABD,或者如果@var为ABC,则值应为DEF-GHI-ABD。

如何:

UPDATE tbl SET col = replace(replace(col, @var + ' – ', ''), ' – ' + @var, '')
内部替换将替换所有中间和“前导”实例,外部替换将捕获所有“最终”实例

如果存在单个实例,例如,
GHI
,则添加一个进一步的最外层调用:

UPDATE tbl SET col = replace(replace(replace(col, @var + ' – ', ''), ' – ' + @var, ''), @var, '')

首先,完全同意上面的评论。。将数据sschema更改为不在数据库列中存储带分隔符的值列表

但是,如果不可能,请尝试以下方法:

Update Table Set 
   colName = Replace(Replace(colName, '- ' + @var, ''), @var + ' -', '')
Where pk = @pk

在字符串末尾添加一个额外的“-”,用附加的破折号替换@var,完成后去掉尾随的“-”

UPDATE tbl
    SET col = LEFT(REPLACE(col + ' - ', @var+' - ', ''), LEN(col)-6)
    WHERE Pk = something
您可以使用:

-- 1: replace(col,@var, '') => your replacement
-- 2: replace(#1, ' - ', '-') => remove spaces
-- 3: replace(#2, '- ', '') => remove first hyphen and space
-- 4: replace(#3, ' -', '') => remove last hyphen and space

UPDATE tbl
   SET col = replace(replace(replace(replace(col,@var, ''), ' - ', '-'), '- ', ''), ' -', '')        
 WHERE Pk=something

在此进行假设,但不要在数据库中存储分隔列表。而是使用一对多连接表,然后这是一个简单的
delete
语句。不幸的是,这不是我的要求。我们有一个一对多关系表,该列仅用于显示目的。