通过另一列的数据更新列的特定部分

时间:2018-12-20 04:44:02

标签: mysql

嗨,我是我的SQL新手,我想通过从date1列获取值来更新我的列b_id,b_id是longtext,date1是dateTime类型

SELECT date1,b_id, DATE_FORMAT(date1'%Y/%m/%d') AS tostore
FROM tbl1 WHERE 
b_id = 'ID/2018/5/13/000111' 
OR
b_id = 'ID/2018/5/13/000222'

当前数据

date1            b_id                        tostore
2018-12-20      ID/2018/5/13/000111         2018/12/20
2018-10-30      ID/2018/5/13/000222         2018/10/30

我想在b_id中使用tostore列,但是如果使用此列,我将不保留b_id的任何数据,我希望ID /和最后g位数字保持不变,我将非常感谢任何建议,谢谢您

UPDATE tbl1
SET b_id = DATE_FORMAT(date1,'%Y/%m/%d') WHERE 
    b_id = 'ID/2018/5/13/000111' 
    OR
    b_id = 'ID/2018/5/13/000222';

 Desired Output

 date1            b_id                        tostore
2018-12-20      ID/2018/12/20/000111         2018/12/20
2018-10-30      ID/2018/10/30/000222         2018/10/30

1 个答案:

答案 0 :(得分:0)

您可以使用mysql的CONCATSUBSTRING_INDEX函数来获取所需的列值,如下所示。

CONCAT按照给定的顺序组合给定的字符串集。

SUBSTRING_INDEX捕获文本的一部分。将-1作为最后一个参数传递有助于通过从右侧捕获来捕获b_id列的ID位数部分。

UPDATE tbl1
SET b_id = CONCAT('ID/', DATE_FORMAT(date1,'%Y/%m/%d'), '/', SUBSTRING_INDEX(b_id, '/', -1))  
WHERE 
    b_id = 'ID/2018/5/13/000111' 
    OR
    b_id = 'ID/2018/5/13/000222';

希望这会有所帮助。