在字符串的第一部分中查找并更改特定数字并替换它

时间:2017-04-24 08:02:30

标签: sql-server

我开始处理旧项目,并且有一个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。我希望这个查询是安全的,以避免任何数字替换问题。希望你能理解我的想法。

3 个答案:

答案 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