如何通过SELECT语句提取字段中特定格式的项目与工作流标识?
字符串标识提取的SELECT查询方案
假设存储目标字符串的字段名为content,数据表名为your_table,以下是针对两种格式的提取方案:
格式1:单引号包裹标识的字符串
示例内容:
/a03/infor/current/server/infa_sh/ScriptFil/infa_common/adap_main 'FI_RE_PRJ' 'wf_RE_ACC_TIE_HIS_MNT_EN_AM'
提取两个标识的SELECT语句:
SELECT -- 提取第一个单引号内的标识(如FI_RE_PRJ) SUBSTRING_INDEX(SUBSTRING_INDEX(content, '''', 2), '''', -1) AS project_code, -- 提取第二个单引号内的标识(如wf_RE_ACC_TIE_HIS_MNT_EN_AM) SUBSTRING_INDEX(SUBSTRING_INDEX(content, '''', 4), '''', -1) AS workflow_name FROM your_table -- 可选:仅过滤该格式的记录 WHERE content LIKE '%''%''%';
格式2:带-f/-wait参数的字符串
示例内容:
$SCRIPTS/run_in.ksh -f FI_FLE_PRJ -wait wf_FI_SV_CNCL_RP_BAS_KF
提取两个标识的SELECT语句:
SELECT -- 提取-f参数后的标识(如FI_FLE_PRJ) SUBSTRING_INDEX(SUBSTRING_INDEX(content, '-f ', -1), ' ', 1) AS project_code, -- 提取-wait参数后的标识(如wf_FI_SV_CNCL_RP_BAS_KF) SUBSTRING_INDEX(SUBSTRING_INDEX(content, '-wait ', -1), ' ', 1) AS workflow_name FROM your_table -- 可选:仅过滤该格式的记录 WHERE content LIKE '%-f %' AND content LIKE '%-wait %';
兼容两种格式的通用查询
如果表中同时存在两种格式的记录,可通过CASE分支处理:
SELECT CASE WHEN content LIKE '%''%''%' THEN SUBSTRING_INDEX(SUBSTRING_INDEX(content, '''', 2), '''', -1) WHEN content LIKE '%-f %' THEN SUBSTRING_INDEX(SUBSTRING_INDEX(content, '-f ', -1), ' ', 1) END AS project_code, CASE WHEN content LIKE '%''%''%' THEN SUBSTRING_INDEX(SUBSTRING_INDEX(content, '''', 4), '''', -1) WHEN content LIKE '%-wait %' THEN SUBSTRING_INDEX(SUBSTRING_INDEX(content, '-wait ', -1), ' ', 1) END AS workflow_name FROM your_table;
跨数据库适配说明
上述语句基于MySQL字符串函数编写,若使用其他数据库需替换对应函数:
- Oracle:用
REGEXP_SUBSTR(content, '''(.*?)''', 1, 1, NULL, 1)提取第一个单引号内的内容 - PostgreSQL:用
SUBSTRING(content FROM '''(.*?)''')实现类似提取逻辑
内容的提问来源于stack exchange,提问作者Ram
相关产品推荐
相关产品推荐

