我在一家制造电子传感器的工厂工作。
我们批量生产传感器(一批有10,000个传感器)。批次编号为1000585855;最后6位数字对于每个批次是唯一的。
然而,制造传感器的第一阶段(在称为Dispense的机器上)涉及一起处理两个批次。
通常,批次的区别仅在于最后一位数字大+1。因此,对于批次1000585855,“姊妹批次”将为1000585856。(当我们在数据库中引用这些正在分配的批次时,将其引用为1000585855_000585856。)
然而,有时候,姐妹组可能会大于+2或+3(实际上它可以是+任何自然数)。例如,我看到1000456872_0000456874。
与批处理相关的信息存储在Oracle数据库表中。该表称为EM_EQUIPMENT_LG表,其结构如下:
| 设备ID|批次ID|
| - -----|- -----|
| 分发|1000731655_000731656|
| 分发|1000746832_000746833|
| 分发|1000731637_000731639|
| 分发|1000575235_000575236|
是否可以构造一个查询,仅当第10个字符和第20个字符(粗体)之间的差值大于1时,才获得BATCH_ID?
因此,如果我在上面的示例表中使用这样的查询,则返回的唯一BATCH_ID应该是1000731637_9。(9减7 = 2)
3条答案
按热度按时间myzjeezk1#
也许最好用两个字符,比如第9和第10,第19和第20,因为以0结尾的数字可能会有一些问题。使用To_number(),因为我不喜欢依赖隐式转换。
ffvjumwh2#
您可以使用
SUBSTR
来查找这些位置处的字符,然后进行减法(隐式地将它们转换为数字):其中,对于样本数据:
输出:
| 设备ID|批次ID|
| - -----|- -----|
| 分发|1000731637_000731639|
| 分发|1000575239_000575240|
或者,如果您想使用所有6位数字,则:
其输出:
| 设备ID|批次ID|
| - -----|- -----|
| 分发|1000731637_000731639|
fiddle
dz6r00yl3#
如果数字不是固定长度的,你可以试试
| 设备ID|批次ID|
| - -----|- -----|
| 分发|1000731637_000731639|
fiddle