以下是我在Oracle SQL查询中尝试做的事情:
我有一个X字符长的帐号(例如:6001055555)。我有一个表具有相同帐号的一部分,但大部分数字都被屏蔽(例如:600 ##########,6001 ######,600244 ####)。
我正在尝试将6001055555中传递的数字与以下值之一600 ##########,6001 ######,600244 ####相匹配。
在此示例中,帐号6001055555应返回6001 ######(来自上面的列表)。我可以达到长度相同但不确定如何解决匹配的问题 - 我正在考虑使用REGEX表达式,但我不确定这是否是正确的路径。
答案 0 :(得分:5)
在这种情况下,您可以使用常规LIKE
比较:
SQL> WITH DATA AS (
2 SELECT '600##########' acct FROM dual UNION ALL
3 SELECT '6001######' acct FROM dual UNION ALL
4 SELECT '600244####' acct FROM dual
5 )
6 SELECT *
7 FROM DATA
8 WHERE '6001055555' LIKE REPLACE (acct, '#', '_');
ACCT
-------------
6001######
我们习惯看到COLUMN LIKE :var
,但切换条款也有效(:var LIKE column
)。
答案 1 :(得分:1)
如果我的理解是仪式,那就是你可能期待的......
select regexp_substr('6001055555',replace('600##########','#'),1) from dual;
如果您从此查询中获得任何值,您可以得出结论:帐号与屏蔽值匹配