根据下表
表1
| 批次起始编号|REG_N_START|批次至N|PREF_REG_N|
| --------------|--------------|--------------|--------------|
| 500万|CAL0001|5000019|CAL|
| 5000050|CAL0031|5000059|CAL|
| 5000100|CAL0299|5000105|CAL|
第1行将生成20个REG_N作为CAL0001,CAL0002,CAL0003,CAL0004,CAL0005,CAL0006,CAL0007,CAL0008,CAL0009,CAL0010,CAL0011,CAL0012,CAL0013,CAL0014,CAL0015,CAL0016,CAL0017,CAL0018,CAL0019,CAL0020
第2行将生成10个REG_N作为CAL0031,CAL0032,CAL0033,CAL0034,CAL0035,CAL0036,CAL0037,CAL0038,CAL0039,CAL0040
第3行将生成6个REG_N作为CAL0299,CAL0300,CAL0301,CAL0302,CAL0303,CAL0304
给定用户将尝试捕获的新范围(开始和结束),我需要查看上表中是否存在任何REG_NUM,并按如下方式通过/失败:
预期结果
| NEW_REG_NUM_FROM|新注册编号至|结果_预期|
| --------------|--------------|--------------|
| CAL0006|公司简介|未通过|
| CAL0019|CAL0025|未通过|
| CAL0025|CAL0025|通过|
| CAL0025|CAL0027|通过|
| CAL0027|CAL0036|未通过|
| CAL0100|CAL0300|未通过|
| CAL0100|CAL0200|通过|
我尝试了这个SQL,但它显然会失败:
SELECT count(*)
FROM TABLE1
WHERE TABLE1.REG_N_START <= NEW_REG_NUM_TO
AND TABLE1.REG_N_START >= NEW_REG_NUM_FROM;
2条答案
按热度按时间eblbsuwk1#
您可以将初始表转换为范围,然后查找重叠:
其中,对于样本数据:
输出:
| NEW_REG_NUM_FROM|新注册编号至|结果|
| --------------|--------------|--------------|
| CAL0006|公司简介|未通过|
| CAL0019|CAL0025|未通过|
| CAL0025|CAL0025|通过|
| CAL0025|CAL0027|通过|
| CAL0027|CAL0036|未通过|
| CAL0100|CAL0300|未通过|
| CAL0100|CAL0200|通过|
小提琴
rqdpfwrv2#
我会尝试类似下面的东西:
;
其实我还没有试过……首先要测试的是以下各项的回报:
在用作CTE的此选择中可能存在一些错误...希望这会有所帮助。最后为我称为CTE的对象创建一个名为tb_intervs的视图。