提问人:NEWBIE 提问时间:8/23/2022 最后编辑:MT0NEWBIE 更新时间:8/25/2022 访问量:113
SQL:基于特定单词的子字符串/修剪列值
SQL: Substring/Trim column values based on specific word
问:
我有表A。如何修剪列 COND,以便值保留单词 ITEM 和后面的所有内容?我希望结果如表 B 所示:
表A
|ID | COND |
|:--- |:----------------------------------------------------|
|1 |ITEM = 'B967','B677','O342' |
|2 |ITEM = 'J833','UR09','ILY7' |
|3 |ITEM = 'B967, OJ87' |
|4 |(CATE = 'OBRT', 'TMPT') AND (ITEM = 'UR09','ILY7') |
|5 |CATE='ONTE,PNTE,QSDW,RVCG' OR ITEM=J833 |
表B
|ID | COND |
|:--- |:--------------------------|
|1 |ITEM = 'B967','B677','O342'|
|2 |ITEM = 'J833','UR09','ILY7'|
|3 |ITEM = 'B967, OJ87' |
|4 |ITEM = 'UR09','ILY7') |
|5 |ITEM=J833 |
答:
1赞
Isolated
8/23/2022
#1
您可以结合使用子字符串和内字符串。INSTR 将返回“ITEM”开始的位置,然后 SUBSTR 将返回该位置开始后的所有内容。
select id, cond, SUBSTR(cond, INSTR(cond, 'ITEM', 1)) as col_name
from my_table
输出:
编号 | 待续 | COL_NAME |
---|---|---|
1 | 项目 = 'B967','B677','O342' | 项目 = 'B967','B677','O342' |
2 | 项目 = 'J833','UR09','ILY7' | 项目 = 'J833','UR09','ILY7' |
3 | 项目 ='B967, OJ87' | 项目 ='B967, OJ87' |
4 | (CATE = 'OBRT', 'TMPT')和 (ITEM = 'UR09','ILY7') | 项目 = 'UR09','ILY7') |
5 | CATE='ONTE,PNTE,QSDW,RVCG' 或 ITEM=J833 | 编号=J833 |
在这里找到 Db-fiddle。
评论
0赞
NEWBIE
8/23/2022
当我运行时,我收到错误消息:函数 INSTR() 的参数数量错误SELECT ID, COND, SUBSTR(COND, INSTR(COND, 'ITEM', 1)) AS COND1 FROM A
0赞
Isolated
8/23/2022
此查询会发生什么情况:select INSTR('ABC TRIM 444', 'TRIM', 1) from dual;
0赞
Gary_W
8/25/2022
#2
使用 REGEXP_SUBSTR() 将允许您捕获 ITEM 和直到最后一位数字字符或单个引号的所有内容(基于您的示例数据),从而消除 ID 4 中的结束部分。请注意REGEXP_SUBSTR会增加更多的开销,因此根据数据的大小,这可能没有那么有效。您的里程可能会有所不同。
WITH A(ID, cond) AS (
SELECT 1, 'ITEM = ''B967'',''B677'',''O342''' FROM dual UNION ALL
SELECT 2, 'ITEM = ''J833'',''UR09'',''ILY7''' FROM dual UNION ALL
SELECT 3, 'ITEM = ''B967, OJ87''' FROM dual UNION ALL
SELECT 4, '(CATE = ''OBRT'', ''TMPT'') AND (ITEM = ''UR09'',''ILY7'')' FROM dual UNION ALL
SELECT 5, 'CATE=''ONTE,PNTE,QSDW,RVCG'' OR ITEM=J833' FROM dual
)
SELECT ID, REGEXP_SUBSTR(cond, '(ITEM.*([[:digit:]]|''))') AS ITEM
from a;
ID ITEM
1 ITEM = 'B967','B677','O342'
2 ITEM = 'J833','UR09','ILY7'
3 ITEM = 'B967, OJ87'
4 ITEM = 'UR09','ILY7'
5 ITEM=J833
已选择 5 行。
评论