#PostgreSQL 截取列值的一部分作为新的列

使用PostgreSQL内置的SQL方法Position+SubStr可以方便处理。

问题背景

由于历史原因,数据表中有个字段是由两个值通过#拼接起来的。

示例:列名 fruit_with_color

<color>#<fruit>

例如

red#apple

另外,除了双值拼接的情况,还存在只有单值的情况:

banana

现在想要把fruit字段从fruit_with_color列中截取出来,并保存为fruit列。

解决方法

我们用的postgres,所以需要利用PostgreSQL的一些字符串处理函数来处理。

  • position 用来查询子字符串的位置
  • substr 用来截取对应的子字符串

完整的sql为:

substr(fruit_with_color, position('#' in fruit_with_color)+1)

注意,最后需要加上查询字串的长度,这里是1。

参考