我有這樣的列值:
1. input -- "This is ssn12345 string"
2. input -- "This is ssn 123456 string"
3. input -- "This is ssn#12345 string"
4. input -- "This is ssn#12345 string ssn1234678"
5. input -- "This is ssn#12345 string ssn-123456"
6. input -- "This is ssn#12345 string ssn 5678 9765"
這里ssn12345可以有動態長度(平均長度不固定)。
輸出將是:
1. output -- "This is ******** string"
2. output -- "This is ********** string"
3. output -- "This is ********* string"
4. output -- "This is ********* string *********"
5. output -- "This is ********* string **********"
6. output -- "This is ********* string *************"
我正在嘗試替換ssn以一些整數值開頭和結尾的字串,例如我們以ssn1234or開頭ssn124567。
我正在嘗試下面的查詢,但它正在替換為單個*值。
select regexp_replace('This is ssn12345 string', 'ssn[^0-9.] ', '*') from dual
This is * string
我必須ssn用*這些之間的那個數字替換下一個字符的值。
有人可以告訴我如何在 Oracle SQL 中實作這一點嗎?如果需要更多詳細資訊,請告訴我。
uj5u.com熱心網友回復:
只需使用“非空白”:
select regexp_replace(
'This is ssn12345 string',
'ssn\S ',
Rpad( '*', length(regexp_substr('This is ssn12345 string','ssn\S ') ), '*')
)
from dual
uj5u.com熱心網友回復:
您可以使用:
WITH data ( value, masked_value, end_pos ) AS (
SELECT value,
REGEXP_REPLACE(
value,
'ssn([ #]?\d ) ',
RPAD(
'*',
LENGTH(
REGEXP_SUBSTR(value, 'ssn([ #]?\d ) ', 1, 1)
),
'*'
),
1,
1
),
REGEXP_INSTR(
value,
'ssn([ #]?\d ) ',
1,
1,
1
)
FROM table_name
UNION ALL
SELECT value,
REGEXP_REPLACE(
masked_value,
'ssn([ #]?\d ) ',
RPAD(
'*',
LENGTH(
REGEXP_SUBSTR(masked_value, 'ssn([ #]?\d ) ', end_pos, 1)
),
'*'
),
end_pos,
1
),
REGEXP_INSTR(
masked_value,
'ssn([ #]?\d ) ',
end_pos,
1,
1
)
FROM data
WHERE end_pos > 0
)
SEARCH DEPTH FIRST BY value SET value_order
SELECT value, masked_value
FROM data
WHERE end_pos = 0;
其中,對于樣本資料:
CREATE TABLE table_name ( value ) AS
SELECT 'This is ssn1 string' FROM DUAL UNION ALL
SELECT 'This is ssn12 string' FROM DUAL UNION ALL
SELECT 'This is ssn12345 string' FROM DUAL UNION ALL
SELECT 'This is ssn123456789 string' FROM DUAL UNION ALL
SELECT 'This is ssn#12345 string ssn 5678 9765' FROM DUAL;
輸出:
價值 MASKED_VALUE 這是 ssn#12345 字串 ssn 5678 9765 這是 ********* 字串 ************* 這是 ssn1 字串 這是****字串 這是 ssn12 字串 這是*****字串 這是 ssn12345 字串 這是********字串 這是 ssn123456789 字串 這是 ************ 字串
db<>在這里擺弄
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/314302.html
