使用由现有值中的字符组成的新字符串更新字段

v3n*_*3nt 6 mysql update

字段是meta_value,当前值就像01/01/2006

我想把它改成一个字符串,20060101所以我想我可以得到这个值并按正确的顺序用字符更新它。

IE

UPDATE wp_postmeta SET meta_value = meta_value[9]meta_value[8]meta_value[7]meta_value[6] 
Run Code Online (Sandbox Code Playgroud)

mdo*_*yle 6

假设 meta_value始终为dd/mm/yyyy 并且您正在寻找 yyyymmdd (不清楚),请尝试以下操作:

UPDATE wp_postmeta 
SET meta_value = CONCAT(SUBSTRING(meta_value FROM 7), 
     SUBSTRING(meta_value, 4, 2), 
     SUBSTRING(meta_value, 1, 2));
Run Code Online (Sandbox Code Playgroud)

首先将其作为 SELECT 运行以在更新之前验证输出,并确保它是您真正需要的。


Stu*_*ore 5

由于该字段存储varchar(255)在该表中(即,它存储为字符串,而不是特殊的日期格式),因此您需要对其进行切片,然后将这些块连接在一起。

假设原始日期是 dd/mm/YYYY 并且所需的格式是 YYYYmmdd 那么你可以做这样的事情:


UPDATE wp_postmeta SET meta_value = concat(substring(meta_value,7,4),substring(meta_value,4,2),substring(meta_value,1,2))
Run Code Online (Sandbox Code Playgroud)

这是使用该substring函数对原始字符串进行拆分,该命令的格式为:


substring(string to split,starting position in string, length of required substring)
Run Code Online (Sandbox Code Playgroud)

这不是唯一的格式,这里有更多示例 - http://dev.mysql.com/doc/refman/5.0/en/string-functions.html#function_substr

然后我们使用该concat函数将 3 个新字符串连接为一个(有关该字符串的详细信息 - http://dev.mysql.com/doc/refman/5.0/en/string-functions.html#function_concat

但是您需要非常小心地运行该更新。目前它将为表中的每一行执行此操作。因此,如果您有一行 post_meta='Stuart Moore',它将被更新为 'MooarSt',这可能不是您想要的。因此,请确保使用 where 子句来限制要修改的行。