SQL技术求助:如何基于t_pfx表前缀筛选特定状态零件ID?
解决方案
没问题,我来帮你调整查询语句,实现只筛选E20至E99开头且状态为OBS/INACT的零件ID。这里提供两种实用的方法,你可以根据实际情况选择:
方法一:直接通过字符串匹配筛选前缀
如果你的零件ID前缀固定是3位(比如E20xxxxxx的前三位是E20),可以直接用LEFT()函数提取前缀,再结合范围判断来过滤:
SELECT part_id FROM 你的主表名称 -- 记得替换成实际的主表名 WHERE status IN ('OBS', 'INACT') AND LEFT(part_id, 3) BETWEEN 'E20' AND 'E99' ORDER BY last_mod_date ASC;
说明
LEFT(part_id, 3)会提取零件ID的前3个字符,比如E2012345会得到E20- 字符串的
BETWEEN比较是按字典序进行的,E20到E99刚好覆盖你需要的所有前缀范围,完美匹配需求
方法二:关联t_pfx表实现动态筛选
如果t_pfx表中存储了所有合法的组件前缀(比如prefix字段存着'E20','E21',...,'E99'),推荐用这种方法——后续前缀规则变更时,只需要更新t_pfx表,不用修改SQL:
SELECT part_id FROM 你的主表名称 -- 替换为实际主表名 WHERE status IN ('OBS', 'INACT') AND LEFT(part_id, 3) IN (SELECT prefix FROM t_pfx) ORDER BY last_mod_date ASC;
说明
- 子查询
SELECT prefix FROM t_pfx会获取所有t_pfx表中定义的组件前缀 LEFT(part_id,3)提取的前缀只要在这个列表里,就会被筛选出来,完全贴合t_pfx表的规则
记得把语句中的你的主表名称替换成你实际使用的主表的名字哦!
内容的提问来源于stack exchange,提问作者bharat005
相关产品推荐
相关产品推荐

