在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
语句。不幸的是,这不是我的要求。我们有一个一对多关系表,该列仅用于显示目的。