2012-02-02 59 views
1

這裏是其上我想執行一個查詢的示例表:MySQL - 是否有可能只更新當前列的一部分值?

Structure of table_1 
number | photos (CHAR,4) 
1234 | 1210 

我想更新從photos列值,但不改變整個值。如果不知道整個值,我想要改變,例如只有第三個字符變成「2」。我怎樣才能做到這一點?

我知道我可以用下面描述的方式做到這一點,但問題是值可能是變量,它是一個列類型CHAR,而不是INT。

UPDATE table_1 SET photos = (photos + 10) where number='1234' 
+0

沒有像UPDATE PARTIAL或UPDATE BYTE(2)這樣的事情。每次更新都會實際寫入新值。 – 2012-02-02 14:21:59

回答

1

是與midleftright功能,因爲照片是一個char類型:

UPDATE table_1 SET photos = 
concat(
    left(photos, 2), 
    '1', 
    right(photos, 1) 
) 
where number='1234' 
0

如果列只包含數字,然後你給會工作的例子。該值將被轉換爲整數,添加到然後再轉換回來。

你可能想解釋你想做這個的理由。這似乎有點奇怪。

+0

用於存儲用戶設置我只想更新字符串的一部分,以防用戶只更新一個設置,並且這些設置不在一個頁面中,因此我無法在添加之前合併它們。 – Lucas 2012-02-02 15:00:07

1

使用CONCAT(),左()和子()

上面的例子是這樣的:

update table_1 
set photos = concat(left(photos, 2), "2", substring(photos, 4)) 
where number = '1234' 

的優勢,這在左/右,則這將變量工作「照片」的長度。它

尋找更普遍的,如果你要設置的x位「2」:

update table_1 
set photos = concat(left(photos, x-1), "2", substring(photos, x+1)) 
where number = '1234' 

(注:我沒有的MySQL現在正在運行,所以我不能測試上述。有一定的錯誤應該很容易讓你糾正)

+0

從價值「0000」執行你的例子後,我想有「0010」我得到價值「1」,但感謝您的幫助。只有'左'和'右'的方式適用於我。 – Lucas 2012-02-02 14:54:07

+0

編輯修復 - 這就是我發佈未經測試的代碼。 – biscuit314 2012-02-02 15:12:29