首页 > 解决方案 > SQL Server 替换列值中的不同字符

问题描述

我有一个条形码列,其中包含一些数据,如下所示:

Z1B1S1A         -- Zone 1 Bay 1 Shelf 1A
Z10B10S10B      -- Zone 10 Bay 10 Shelf 10B

想将它们替换为:

01-01-01A          -- I think I can get by with  1-1-1A
10-10-10B

zone、bay、shelf 可以从 1 到 99。

我的问题是与 1 位或 2 位数字不一致,最后一个字符“B”可能被误认为是 Bay 号。

感谢您的任何帮助。

标签: sqlsql-serverreplacesql-update

解决方案


2 解决方案。第一个解决方案来自Analyst & DeepShiKha 1. 第一个解决方案的帮助和想法

-- SUBSTRING ( expression ,start , length )
-- CHARINDEX ( expressionToFind , expressionToSearch [ , start_location ] )
select substring(Barcode,2,charindex('B',barcode)-2) AS Zoney,
       substring(Barcode,charindex('B',Barcode)+1, charindex('S',Barcode)-charindex('B',Barcode)-1) AS Bay,
       substring(Barcode,charindex('S',Barcode)+1,len(Barcode)) AS Shelf,

concat (
        substring(Barcode,2,charindex('B',barcode)-2),'-',
        substring(Barcode,charindex('B',Barcode)+1, charindex('S',Barcode)-charindex('B',Barcode)-1), '-',
       substring(Barcode,charindex('S',Barcode)+1,len(Barcode)) 
       ) AS ZBS

from TB_BarcodeTag4 
where  Barcode LIKE 'Z%B%S%'


2. Second solution is from my own

    UPDATE TB_BarcodeTag4
    SET Barcode = STUFF(Barcode, LEN(Barcode),1, '&')
    WHERE Barcode LIKE 'Z%B%S%' AND Barcode like '%B'

    UPDATE TB_BarcodeTag4
    SET Barcode = REPLACE(REPLACE(REPLACE(Barcode, 'Z', ''),'B','-'),'S','-')
    WHERE Barcode LIKE 'Z%B%S%'

    UPDATE TB_BarcodeTag4
    SET Barcode = STUFF(Barcode, LEN(Barcode),1, 'B')
    WHERE Barcode LIKE 'Z%B%S%' AND Barcode like '%&'

推荐阅读