如题,怎样修改表中某字段的字符串的值,如我表中有数据如下:
很明显在内容中有个时间是不对的,我想把时间修改成具体的另一张表的某字段的到期时间。
这里用到mysql的两个函数,replace()和substring()(具体语法,参考这篇博客)。
具体思路就是:先用substring把要替换的内容截取出来,然后再用replace函数替换成自己想要的内容
分析一下,我的信息除了时间,其他的内容是一样的。这样的话,我们可以通过substring把时间截取出来,由于不知道要替换的文本下标是多少,这里我用java来获取,如下:
public class demo {
public static void main(String[] args) {
String s = "您购买的365家长课堂VIP会员已经即将到期(1970-01-18 17:20:21 到期),如想继续免费观看所有微课";
String s1 = "您购买的365家长课堂VIP会员已经即将到期(";
String s2 = "您购买的365家长课堂VIP会员已经即将到期(1970-01-18 17:20:21";
System.out.println("总长度" +s.length());
System.out.println("开始下标:" + s1.length());
System.out.println("结束下标:" + s2.length());
String ss = s.substring(23, 42);
System.out.println(ss);
System.out.println("截图到的内容长度:" + ss.length());
}
}
输出的结果是:
根据结果,我们就可以来截取和替换了。下面是mysql的写法:
SELECT a.content
,replace(a.content,substring(a.content,24,19), '这里是你想替换的内容') new_content
FROM tableA a
ps:mysql里的substring(content,start,len)和java中的substring(content,start,end)这两个函数中的最后一个参数是不同的,mysql的是要截取的字符串长度,而java的是结束下标,所以上面substring(a.content,24,19)为什么是19而不是java代码中的42就是这个原因。
我这里修改的是内容是我从另一张表查过来的字段,修改完后的效果如下图(update的sql就不贴出来了):
批量修改完毕。
总结:
批量修改的内容除了要修改的部分,其他的部分要一样;
在获取要截取内容的开始下标和内容长度,可借助自己熟悉的语言的字符串截取方法获得;
最后使用replace函数进行内容替换。