我在Postgres表中有以下两列
name | last_name ---------------- AA | AA aa BBB | BBB bbbb .... | ..... .... | .....
最终出局应该是这样的
name | last_name ---------------- AA | aa BBB | bbbb .... | ..... .... | .....
解决方法
UPDATE table SET last_name = regexp_replace(last_name,'^' || name || ' ','');
编辑
我在这里使用正则表达式. ‘^’||名字|| ”建立正则表达式,所以使用’戴维斯麦克戴维斯’的例子,它构建了正则表达式’^ Davis’. ^使正则表达式锚定到字符串的开头,因此它将匹配单词’Davis’,后跟一个空格,仅在它替换的字符串的开头,即last_name列.
没有像这样的正则表达式,你可以达到同样的效果:
UPDATE table SET last_name = substr(last_name,length(name) + 2);
您需要在长度上添加两个来创建偏移量,因为substr是从一开始的(1)并且您想要包含空格(1).但是,我更喜欢正则表达式解决方案,即使它可能表现更差,因为我发现它有点自我记录.它具有额外的优势,它是幂等的:如果你在数据库上再次运行它将没有任何效果. substr / offset方法不是幂等的;如果你再次运行它,它会从你的姓氏中吃掉更多的字符.
原文地址:https://www.jb51.cc/mssql/78134.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。