这是我要在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)。

10-01 08:20