【发布时间】:2022-01-20 21:56:51
【问题描述】:
我在屏蔽下面描述的数据时遇到了问题 --
| Input | Output | |
|---|---|---|
| 1. | CC# S2345-567 Match 2345 This is String | ************** Match 2345 This is String |
| 2. | My Self CC P457-238 This is Data | My Self *********** This is Data |
| 3. | My Card is CC 457829 | My Card is ********* |
| 4. | This is the CC# 42357 This is the my records | This is the ********* This is the my records . |
我能够通过使用以下查询来屏蔽第 3 和第 4 个条件 --
SELECT CASE
WHEN start_pos1 > 0
THEN SUBSTR( col, 1, start_pos1 - 1)
|| RPAD('*', end_pos1 - start_pos1, '*')
|| SUBSTR(col, end_pos1)
ELSE col
END AS col_new
FROM (
SELECT col,
REGEXP_INSTR( col, 'CC([. # -]*\d+)+', 1, 1, 0, NULL) AS start_pos1,
REGEXP_INSTR( col, 'CC([. # -]*\d+)+', 1, 1, 1, NULL) AS end_pos1
FROM Table
);
任何人都可以为上述第一个和第二个条件提供帮助吗?
【问题讨论】:
-
我们需要更精确的规则来屏蔽您的数据,以便在此处给出答案。
-
CC 或 CC# 后的下一个字母数字或数字可以被屏蔽,字母数字单词可以包含一个字符。例如 CC# S2345-567 匹配 2345 这是字符串 ---- ************** 匹配 2345 这是字符串 我的自我 CC P457-238 这是数据 ----- 我的自我 *********** 这是数据
-
作为注释,一般来说,not 使用 CC 文本的确切原始宽度可能会更好。这样做的原因是,放弃长度可能仍然会泄露关键信息,例如使用的信用卡类型是什么。
标签: oracle