我不确定这是否可能,我有一个DB表,其中有字段refNumber,一些字段值包含两个前导零,以下是示例。
| 同上。|参考编号|
| - -|- -|
| 小千零一|一百二十三|
| 小行星1000|小行星00456|
现在,我尝试编写一个查询,该查询可以从此表中进行选择,并且没有前导零(仅限两个不小于或大于两个)。以下是一个示例,对于选择参考编号=123或参考编号=00123,应返回结果10001;对于参考编号=00456或参考编号=456,应返回结果10002。我不能使用Like运算符,因为在这种情况下,可能还会返回其他记录。是否可以通过查询来实现?如果不能,选择此类记录的正确方法是什么?我正在避免在应用程序中循环所有行。
3条答案
按热度按时间kyks70gy1#
您需要对-列和要作为筛选依据的值应用
TRIM
函数:zysjyyx42#
使用修剪()
或替换(),以支持的为准
dvtswwa33#
虽然当前接受的答案是可行的,但请注意,最好的情况下,它会导致Db2执行全索引扫描,最坏的情况下,它会导致全表扫描。
要从数百万条记录中返回1条或2条记录,这不是一种特别有效的方法。每当在
WHERE
子句中对表列使用表达式时,都会发生这种情况。如果你知道只有5位数或更少,一个更好的解决方案是做以下事情:
这假定您可以在查询之外构建这两种可能性。
如果您确实希望查询处理这两种可能性...
如果将'00123'或'123'作为值传入,则上面的查询将在
refNumber
中查找包含'00123'或'123'的记录。假设您在refNumber上有一个索引,那么就可以快速有效地完成这一操作。
如果前导零的数目未知,则您将陷入
但是,如果您的平台/版本的Db2支持表达式上的索引,则出于效率考虑,您需要创建一个索引