2017-08-10 60 views
0

我有表,包含列與值:截斷和插入串

id string 

1 aaabbbfff 

2 aaabbbfffff 

3 aaabbbffff 

4 aaabbbfffffff 

5 aaaaabbbffffff 

6 aaaaabbbffffff 

7 jjjjjbbbffffff 

8 gggggtttffffff 

而且我已經不可改變的部分(KKK),我需要在字符串的開頭插入。在結果 - 'kkkbbbfff'

我使用UPDATE語句:

UPDATE [dbo].[mytable] 
    SET string = 'kkk' + 
    SUBSTRING(string, 3, LEN(string)) 
from 
    [dbo].[mytable] 

它適用於1,2,3,4行。但是,在5行和6行中包含更多的符號'a'和代碼SUBSTRING(string, 6, LEN(string))不起作用。我如何在一個語句中更改所有行?

在結果我需要表:

ID字符串

1 kkkfff 

2 kkkfffff 

3 kkkffff 

4 kkkfffffff 

5 kkkffffff 

6 kkkffffff 

7 kkkffffff 

8 kkkffffff 
+0

能否出現'a'出現在字符串的其他位置? –

+0

我需要在每行的第一個符號'f'之前插入'kkk'部分。 – Kirill

+0

@TimBiegeleisen no。但其他行可以包含不同的符號,如第7行和第8行 – Kirill

回答

0
在你的榜樣

,你可以做到這一點,如: 'A' 與REPLACE移除所有並加入三K黨

UPDATE [dbo].[mytable] 
    SET string = 'kkk' + REPLACE(string, 'a','') 
1

以下更新將從開頭替換子串直到第一個fkkk

UPDATE [dbo].[mytable] 
SET string = 'kkk' + SUBSTRING(string, 
           CHARINDEX('f', string), 
           LEN(string) - CHARINDEX('f', string) + 1) 

如果您不是需要第一f前插入kkk並保留開頭的子字符串您可以使用STUFF()

UPDATE [dbo].[mytable] 
SET string = STUFF(string, CHARINDEX('f', string)-1, CHARINDEX('f', string)-1, 'kkk') 
+0

此代碼更新[dbo]。[mytable] SET string ='kkk'+ SUBSTRING(string,CHARINDEX('f',string))not work – Kirill

+0

子字符串函數需要3個參數。 – Kirill

+0

@Kill我糾正了錯誤。 –

0

如何:

UPDATE [dbo].[mytable] 
    SET string = 'kkk' + RIGHT(string, len(string)-3) 
from 
    [dbo].[mytable] 
+0

如果你總是需要替換字符串的前三個字符,這將工作。 – ssn

+0

,但他寫道:「但是在5行和6行的exp包含更多符號'a'」 –

+0

甚至沒有注意到;但是要理解他的意思並不是一件容易的事情 - 很明顯,他需要確切地說明他在做什麼。 – ssn

0

這個怎麼樣:

UPDATE [dbo].[mytable] 
SET string = replace (string, left(string, charindex('f', string)-1), 'kkk') 
FROM [dbo].[mytable]