SQL Server 2008 - 添加到名称列中特定位置的字符串

SQL Server 2008 - Add to string in particular position within name column

我被要求做一项超出我 SQL 技能的工作,并且在网上做了一些研究,但无法完全找到要在 SQL Server 2008 中完成的写入解决方案,并且不是 MySQL.

我有一个 table,我需要通过在某个点之后添加一个额外的字符串来更新特定名称,同时保持字符串的其余部分完整无缺。

e.g.

Current Name = 'Name - Location - 0005'
New Name = 'Name (West) - Location - 0005'

如您所见,我需要添加文本 (West),我有一个 table,其中列出了所有代码(例如 0005),我需要 link 将其添加到我的 where 子句中只更新相关名称。

所以问题是:

1 - 如何通过在设定位置(第 5 个字符)添加额外文本来更新名称,同时保持名称右侧的任何文本

2 - 有没有一种方法可以让我做类似的检查代码,我尝试使用 Contains 但是 table 不是全文索引。这不是一个大问题,因为我可以手动创建更新语句,就像 table 中的每一行一样

STUFF 的帮助下我们可以做到这一点

STUFF ( character_expression , start , length , replaceWith_expression )
SELECT STUFF('Name - Location - 0005', 5, 0, ' (West)');

输出将是 Name (West) - Location - 0005

使用STUFF功能

declare @names varchar(100)
set @names='Name - Location - 0005'
select stuff(@names,5,0,' (West)')

您可以使用简单的字符串替换来插入 (West),如下所示:

DECLARE @val NVARCHAR(30) = 'Name - Location - 0005'

SELECT REPLACE(@val, 'Name ', 'Name (West) ')

更进一步,使用 WHERE 子句执行更新以过滤以 '0005' 结尾的记录,您可以这样做:

DECLARE @val NVARCHAR(30) = 'Name - Location - 0005'

SELECT  @val AS Val
INTO    #temp

UPDATE  #temp
SET     Val = REPLACE(@val, 'Name ', 'Name (West) ')
WHERE   RIGHT(Val, 4) = '0005'

SELECT  *
FROM    #temp

DROP TABLE #temp

这假设格式是一致的。如果 Name 可以出现多次,或者 0005 可以出现在值末尾以外的位置,您可能需要对其进行调整。