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
可以出现在值末尾以外的位置,您可能需要对其进行调整。
我被要求做一项超出我 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
可以出现在值末尾以外的位置,您可能需要对其进行调整。