2017-04-24 28 views
0

我開始對舊的項目工作,並有存儲的文章編號,舉例如下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部分。第一部分描述了它是什麼樣的產品,當用戶爲特定的產品選擇不同的數字時,我必須改變它。例如PRODUCENT 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

更新噸 組t.col =取代(yourcol,子串(yourcol,1,CHARINDEX( '',yourcol,1),2) 從表T

這個發現第一個字符第一個點之前

substring(yourcol,1,charindex('.',yourcol,1) 

那你就用替換,用任何你需要

+0

你能提供全APRT包括replacment我檢查吧。 – Dino

+0

我不知道你在問什麼,試着用select來替換,看看這是不是你想要的 – TheGameiswar

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

+0

謝謝你的貢獻。也許愚蠢的問題,但你確定你的代碼是'夠安全'意味着將永遠做這項工作?想避免這一步的任何錯誤。其次,你如何看待其他人的答案,比較你的解決方案,想選擇'最好的' – Dino

+0

當然,我相信我的代碼邏輯。但是你想避免任何錯誤,然後仔細測試。你可以嘗試別人,並自己挑選一個:) – TriV

+0

它會總是第一個字符串(第一個點之前)對嗎?以後不管什麼,或者期望另外一個第二點? – Dino

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 
相關問題