我在oracle中有一个带或不带前导零样本的数字字符串列:
00000000056
5755
0123938784579343
00000000333
984454
问题是使用like的部分搜索操作非常慢
select account_number from accounts where account_number like %57%
一种解决方案是将搜索限制为仅匹配,并添加一个额外的整数列,表示完全匹配的数值。
此时我不确定我们是否可以添加额外的列,
你们有其他想法吗?
是否可以告诉Oracle将数字字符串列索引为整数值,以便我们可以对其进行精确的数字匹配?
例如查询值:00000000333
将是:
select account_number from accounts where account_number = '333'
忽略前导零
我可以使用regex_like
并忽略它们,但我担心它会变慢。
答案 0 :(得分:5)
Oracle支持基于函数的索引。因此,如果您对to_number
的结果进行索引:
CREATE INDEX acocunt_number_idx
ON accounts(TO_NUMBER(account_number))
方式是,如果您使用to_number
的查询获得确切的数值,则将使用索引:
SELECT account_number
FROM accounts
WHERE TO_NUMBER(account_number) = 333
答案 1 :(得分:2)
您可以使用to_number
。
select account_number from accounts
where to_number(account_number) = 333