2012-12-23 80 views
2

我不知道它會被調用來執行此操作,所以我不完全知道如何進行大量搜索。SQL將數據添加到已填充的單元格中

這裏是和示例數據庫:

name  id  code 
bob  1  Aa Bb cc DD ee 
sue  3  aa Bb Cc Dd Ee 
tom  8  AA BB cc dd EE 

我希望能夠添加「C」組和「d」組之間的「F」組。所以它會是:

name  id  code 
bob  1  Aa Bb cc ff DD ee 
sue  3  aa Bb Cc ff Dd Ee 
tom  8  AA BB cc ff dd EE 

有關如何完成此任務的任何想法?

+4

是否存在多值屬性的一個很好的理由,而不是將它們移動到[單獨的表](http://en.wikipedia.org/wiki/First_normal_form)? – mgibsonbr

+0

使用'SELECT'將文本複製到一個變量,然後在字符串中添加「F」組,然後使用'UPDATE'將該行添加回表中,但是我建議您使用上述註釋。你用什麼腳本語言? – SnareChops

+0

PHP將把數據庫信息調用到網站上。我會研究單獨的表格,但我認爲這不是一個好的解決方案。上面是一個例子,並不直接涉及到實際的數據庫,除了我需要在其中一列中的其他文本的中間插入文本這一事實。 – Chelsea

回答

1
update mytable set code = replace(code, "cc DD", "cc ff DD") -- where is optional; 

和更多的更新的CC和DD的資本的其他變化(在全部16種變化):

update mytable set code = replace(code, "Cc DD", "Cc ff DD") -- where is optional; 
update mytable set code = replace(code, "CC DD", "CC ff DD") -- where is optional; 
update mytable set code = replace(code, "cC DD", "cC ff DD") -- where is optional; 
-- etc 
1

我不認爲有這樣做的標準方法,但許多數據庫有辦法對錶格列執行正則表達式操作。在PostgreSQL,例如,你可以這樣做:

UPDATE table 
SET code = regex_replace(code, '(.. .. ..) (.. ..)', E'\\1 ff \\2', ''); 

(注:此代碼是改編自this answerthese docs,但我還沒有測試它自己,所以有可能是錯誤的)

1

由於你的列有固定的長度,不需要搜索大寫和小寫字符的變體。你可以通過利用角色位置得到你需要的東西。 使用left()函數來提取前8個字符和right()來提取最後5個字符和夾層'ff'兩者之間。

注意我已經這樣做了SQL服務器上,等效功能可以很容易地在其他數據庫中實現

UPDATE yourTable 
set code = left(code,8)+' ff ' + right(code,5) 

輸出

Aa Bb cc ff DD ee 
aa Bb Cc ff Dd Ee 
AA BB cc ff dd EE 
2

在SQLServer的2005+使用STUFF功能

SELECT name, id, STUFF(code, 9, 1, ' ff ') AS Code 
FROM your_table 
相關問題