#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。