我开始在老项目上工作,有一个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。我希望这个查询是安全的,以避免任何关于数字的问题,replacments.Hope你明白我的意思。
发布于 2017-04-24 08:15:16
你可以用它来更新。'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
发布于 2017-04-24 08:06:28
update t set t.col= replace(您的列,子字符串(您的列,1,字符索引(‘.,您的列,1),2)从表t
这将查找第一个点之前的第一个字符
substring(yourcol,1,charindex('.',yourcol,1)
然后使用replace,将其替换为您需要的任何内容
发布于 2017-04-24 11:28:23
您可以使用此查询进行多次更新,
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
https://stackoverflow.com/questions/43582779
复制相似问题