2017-04-24 2 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 セットt.col =置き換える(yourcol、ストリングは(yourcol、1、CHARINDEXは( ''、yourcol、1)、2)テーブルTから

これは最初のドットの前に最初の文字を見つけ

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

その後、あなたはあなたが更新のためにこれを使用することができ

+0

あなたは私にしてくださいチェックするreplacmentのを含めた全体アプルを提供することができます。 – Dino

+0

私はあなたが尋ねているものを手に入れません。選択して置き換えて、これがあなたが望んだものかどうかを確かめてください。 – 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

常に最初の文字列(最初のドットの前)を取るでしょうか?後で何が問題になるのでしょうか、それとも1つの追加の2番目のドットが必要ですか? – Dino

0

あなたが複数のupdationため、このクエリを使用することができ、

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 
関連する問題