sql - 使用 SQL 从列中提取除最后一个单词之外的所有文本
问题描述
假设我的 items 表中有一个名为name
:
name
----
Wrench
Hammer (label1)
Screwdriver (label1) (label2)
Tape Measure (label1) (label2) (label3)
我想编写一个 PostgreSQL 查询来提取除最后一个标签(如果存在)之外的所有文本。因此,鉴于上面的数据,我想最终得到:
substring
---------
Wrench
Hammer
Screwdriver (label1)
Tape Measure (label1) (label2)
我怎样才能做到这一点?
解决方案
使用子字符串和正则表达式。
语法是:
substring(string, regularExpression)
正则表达式应该使用 () 来分隔要提取的字符串的哪一部分。例如:
substring('abcef', 'b(..)')
将返回“ce”,即 b 后面的两个字符。如果正则表达式与字符串不匹配,则返回 NULL。
特别是在这种情况下:
dmg@[local] # select substring('Hammer (label1)' from '^(.+)\([^\)]+\)$') ;
substring
-----------
Hammer
(1 row)
dmg@[local] # select substring('Tape Measure (label1) (label2) (label3)' from '^(.+)\([^\)]+\)$') ;
substring
---------------------------------
Tape Measure (label1) (label2)
(1 row)
推荐阅读
- ios - 如何添加包含新数据的临时单元格?
- php - 变量不传递给类(PHP)
- entity-framework - 从附加实体内部获取数据库上下文
- linux - 我如何能够从终端将共享库作为可执行文件运行?
- c - 使用 OpenSSL Libcrypto 循环 ASN.1 序列
- ios - 使用产品 -> 存档时找不到“FirebaseCore/FirebaseCore.h”文件
- powershell - 尝试使用小于运算符评估注册表项显示版本失败
- ajax - Laravel - 带有 Ajax 的 daterangepicker 返回 500 内部服务器错误的状态
- python - Tkinter 事件处理程序无法查看全局变量
- python - 广播失败:如何决定广播的轴心?