我开始处理旧项目,并且有一个sql server数据库列,用于存储文章编号,例如如下:
11.1006.45
11.1006.46
11.1006.47
01.10012.11
01.10012.12
2.234.1
2.234.2
2.234.3
657.104324.32
每个数字包含3个部分。第一部分描述了什么是产品,当用户为特定产品选择不同的数字时,我必须改变这一点。例如,根据我们的例子,生产数字2现在将是13:
2.234.1
2.234.2
2.234.3
现在必须以这种方式完成:
13.234.1
13.234.2
13.234.3
我正在寻找sql查询,它会查找所有记录,其中产品编号为例如2.xxxxx,然后替换为13.xxxxx。我希望这个查询是安全的,以避免任何数字替换问题。希望你能理解我的想法。
答案 0 :(得分:1)
您可以将其用于更新。 “2。和13.'可以是任何其他字符串
DECLARE @SampleTable AS TABLE
(
Version varchar(100)
)
INSERT INTO @SampleTable
VALUES
('11.1006.45'),
('11.1006.46'),
('11.1006.47'),
('01.10012.11'),
('01.10012.12'),
('2.234.1'),
('2.234.2'),
('2.234.3'),
('657.104324.32')
UPDATE @SampleTable
SET
Version = '13.' + substring(Version, charindex('.', Version) + 1, len(Version) - charindex('.', Version))
WHERE Version LIKE '2.%'
SELECT * FROM @SampleTable st
演示链接:Rextester
答案 1 :(得分:0)
更新t set t.col = replace(yourcol,substring(yourcol,1,charindex('。',yourcol,1),2) 来自表t
找到第一个点之前的第一个字符
substring(yourcol,1,charindex('.',yourcol,1)
然后你使用替换,用你需要的任何东西替换它
答案 2 :(得分:0)
您可以将此查询用于多次更新,
DECLARE @Temp AS TABLE
(
ArtNo VARCHAR(100)
)
INSERT INTO @Temp
VALUES
('11.1006.45'),
('11.1006.46'),
('11.1006.47'),
('01.10012.11'),
('01.10012.12'),
('2.234.1'),
('2.234.2'),
('2.234.3'),
('657.104324.32')
UPDATE @Temp
SET ArtNo = CASE WHEN SUBSTRING(ArtNo,1,CHARINDEX('.',ArtNo)-1) = '2' THEN STUFF(ArtNo,1,CHARINDEX('.',ArtNo)-1,'13')
WHEN SUBSTRING(ArtNo,1,CHARINDEX('.',ArtNo)-1) = '11' THEN STUFF(ArtNo,1,CHARINDEX('.',ArtNo)-1,'15')
ELSE ArtNo
END
SELECT * FROM @Temp