【发布时间】:2013-09-05 10:18:49
【问题描述】:
我在 SQL Server 2008 数据库中有一个名为 Meter 的表。此表有一个名为Name 的列。
Name 列中的每个条目都具有以下 ZAA\ 的前缀。我想将此前缀更改为ZAA_,而不影响列中的其余文本。
【问题讨论】:
标签: sql database sql-server-2008 tsql where
我在 SQL Server 2008 数据库中有一个名为 Meter 的表。此表有一个名为Name 的列。
Name 列中的每个条目都具有以下 ZAA\ 的前缀。我想将此前缀更改为ZAA_,而不影响列中的其余文本。
【问题讨论】:
标签: sql database sql-server-2008 tsql where
UPDATE Meter
SET Name = 'ZAA_' + SUBSTRING(Name, 4, LEN(Name))
WHERE SUBSTRING(Name, 1, 4) = 'ZAA\'
编辑:
或者正如@Damien_The_Unbliever 所说,使用索引:
UPDATE Meter
SET Name = 'ZAA_' + SUBSTRING(Name, 4, LEN(Name))
WHERE Name LIKE 'ZAA\%'
编辑
根据您的评论,尝试使用此语句修复额外的\:
UPDATE Meter
SET Name = 'ZAA_' + SUBSTRING(Name, 5, LEN(Name))
WHERE Name LIKE 'ZAA_\%'
【讨论】:
Name LIKE 'ZAA\%' 至少允许索引(如果存在)查找要更新的行。
LEN改为LENGTH,SUBSTRING的第二个参数是起始偏移量,所以应该比要剥离的字符数多1。所以,要删除 4 个字符,这个值就是 5。
以下是您可以尝试的查询
CREATE TABLE Meter
([Name] varchar(7))
;
INSERT INTO Meter
([Name])
VALUES
('ZAA\001')
;
select * from Meter;
Update Meter
set Name = stuff(Name,4,1,'_')
Where SUBSTRING(Name, 1,4) ='ZAA' + Char(92);
select * from Meter;
【讨论】:
MYSQL:
UPDATE Meter
SET Name = CONCAT('ZAA' ,'_', SUBSTRING(Name, 4, LENGTH(Name)))
WHERE Name LIKE 'ZAA\%'
【讨论】: