当一个值被部分屏蔽时,比较预言机中的值



这是我在Oracle SQL查询中尝试做的事情:

我有一个 X 个字符长的帐号(例如:6001055555)。 我有一个表,其中一部分具有相同的帐号,但大部分数字都被屏蔽了(例如:600##、6001####、600244####)。

我正在尝试将6001055555中传递的数字与以下值之一匹配 600###、6001####、600244####。

在此示例中,帐号6001055555应返回 6001###(来自上面的列表)。 我可以达到长度相同的地步,但不确定如何解决匹配问题 - 我正在考虑使用 REGEX 表达式,但不确定这是否是正确的路径。

在这种情况下,

您可以使用常规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)。

如果我的理解是仪式,这就是你可能期待的......

select regexp_substr('6001055555',replace('600##########','#'),1) from dual;

如果您从此查询中获得任何值,则可以得出结论,帐号与掩码值匹配

最新更新