我需要运行每周提取并从外部数据库更新查阅列值。我面临的问题是我的查询列x_ids包含可变长度和模式的字符串值,即
x_ids
------
CHE00r
NWA048
HAM54O1A
STR191O1C
我的问题是,为更新选择的某些值还包括值后面的空格和括号。即STR191O1C以上可反映STR191O1C(250)
我已尝试以下选择进行更新: -
select substr(b.x_ids,1,instr(b.x_ids,' ',1,1) - 1)
from lookup_tab a, external_tab b
where a.site_id = B.SITE_ID
and a.zone_id = b.zone_id
这将删除括号中的数字并提供我正在查找的值,但也不返回没有括号或空格的其他行的值。 如果没有空格,则需要将所有值返回到行尾,如果存在,则需要返回空格。
答案 0 :(得分:3)
您可以通过在搜索空格之前向字符串添加空格来轻松调整逻辑以处理此问题:
select substr(b.x_ids, 1, instr(b.x_ids || ' ', ' ', 1, 1) - 1)
from lookup_tab a join
external_tab b
on a.site_id = B.SITE_ID and a.zone_id = b.zone_id
答案 1 :(得分:0)
您可以使用正则表达式执行此操作:
SELECT REGEXP_SUBSTR( b.x_ids, '^(.*?)($| )', 1, 1, NULL, 1 )
FROM lookup_tab a
JOIN external_tab b
ON a.site_id = B.SITE_ID and a.zone_id = b.zone_id
或使用CASE
声明:
SELECT CASE WHEN INSTR( b.x_ids, ' ' ) = 0 THEN b.x_ids
ELSE SUBSTR( b.x_ids, 1, INSTR( b.x_ids, ' ' ) - 1 )
END
FROM lookup_tab a
JOIN external_tab b
ON a.site_id = B.SITE_ID and a.zone_id = b.zone_id
或者:
SELECT SUBSTR(
b.x_ids,
1,
CASE WHEN INSTR( b.x_ids, ' ' ) > 0 THEN INSTR( b.x_ids, ' ' ) - 1 END
)
FROM lookup_tab a
JOIN external_tab b
ON a.site_id = B.SITE_ID and a.zone_id = b.zone_id