我想将一条记录与SQL中另一个表的记录的子字符串进行比较

时间:2019-03-19 10:02:16

标签: sql oracle

我有一个主表,其中记录了不同类型但未在同一表中定义的零件。相反,我们有另一个名为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。能否请任何人帮助我

4 个答案:

答案 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 operatorOR 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