2012-02-02 19 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

相关问题