加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

SQL – 从列的文本中删除子字符串

发布时间:2020-12-12 06:42:50 所属栏目:MsSql教程 来源:网络整理
导读:我在Postgres表中有以下两列 name | last_name----------------AA | AA aaBBB | BBB bbbb.... | ..... .... | ..... 如何通过从中删除名称文本来更新last_name? 最终出局应该是这样的 name | last_name----------------AA | aaBBB | bbbb.... | ..... .... |
我在Postgres表中有以下两列
name | last_name
----------------
AA   | AA aa
BBB  | BBB bbbb
.... | ..... 
.... | .....

如何通过从中删除名称文本来更新last_name?

最终出局应该是这样的

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方法不是幂等的;如果你再次运行它,它会从你的姓氏中吃掉更多的字符.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读