我有一个主表,其中记录了不同类型但未在同一表中定义的零件。相反,我们有另一个名为t_pfx的表,其中零件类型是根据它们的前缀定义的,前提是t_pfx与主表无关。可以说部件ID从E20xxxxxx,E21xxxx .....到E99xxxxx开头,是在t_pfx中定义的组件。
我写这样的查询
select part_id where status in ('OBS','INACT') order by last_mod_date asc;
但是上面的查询将选择所有零件类型。
如果零件ID以E20xxxx,E21xxxx .....开头,则我需要进行比较查询。仅应提取E99xxxxx。能否请任何人帮助我
答案 0 :(得分:2)
一种方法是正则表达式:
where status in ('OBS', 'INACT') and
regexp_like(part_id, '^E[2-9][0-9]')
如果您知道第二和第三位始终是数字,则还可以执行以下操作:
where status in ('OBS', 'INACT') and
(part_id >= 'E20' AND
part_id < 'E9:'
)
冒号恰好是'9'
之后的Ascii字符。此方法的优点是它可以利用包含part_id
的索引。
答案 1 :(得分:1)
将like operator
与OR condition
一起使用
select part_id from tablename
where status in ('OBS','INACT') and (part_id like '20xxxx%' or part_id like '21xxxx%' or
part_id like '99xxxxx%')
order by last_mod_date asc
答案 2 :(得分:1)
您可以在过滤器中使用正则表达式
WHERE REGEXP_LIKE(part_id,'[^0-9]');
答案 3 :(得分:1)
...其中substr(part_id,1,2)> = 20