【发布时间】:2019-08-14 09:04:23
【问题描述】:
我有一个表 table1 有 1 列 - edi_value 类型为 CLOB。
这些是条目:
seq edi_message
1 ISA*00* *00* *08*9254110060 *ZZ*123456789 *041216*0805*U*00501*000095071*0*P*>~
GS*AG*5137624388*123456789*20041216*0805*95071*X*005010~
ST*824*021390001*005010X186A1~
2 ISA*00* *00* *08*56789876678 *ZZ*123456789 *041216*0805*U*00501*000095071*0*P*>~
GS*AG*5137624388*123456789*20041216*0805*95071*X*005010~
ST*824*021390001*005010X186A1~
请注意 - 行数可能不同,从 3 到 500。
我正在寻找的是以下条件:
- 忽略每行第一个 * 之前的文本,对于每一行,第一个 * 之前的文本不应更改。例如。 GS、ST不应该改变。只有在第一个 * 之后才应该随机化
- 用随机数替换数字 [0-9],例如。如果将 0 替换为 1,则应该是 1 througout。
- 用随机文本替换文本 [A-Za-z],例如。如果将 A 替换为 W,则应始终将其替换为 W
- 保留特殊字符原样
一个字符/数字只能映射到一个随机字符/数字
输出可以是:
seq edi_message
1 ISA*11* *11* *13*4030111101 *QQ*102030234 *101010*1313*U*11311*111143121*1*V*>~
GS*WE*3122000233*102030234*01101010*1313*43121*X*113111~
ST*300*101241111*113111X130A1~
2 ISA*11* *11* *13*30234320023 *QQ*102030234 *101010*1313*U*11311*111143121*1*V*>~
GS*WE*3122000233*102030234*01101010*1313*43121*X*113111~
ST*300*101241111*113111X130W1~
这在 Oracle SQL 中如何实现?
【问题讨论】: