db2 用于BIGINT的regexp_replace的替代项

rsl1atfo  于 2022-11-07  发布在  DB2
关注(0)|答案(2)|浏览(310)

我是Oracle和DB2编程的新手,我有一个问题。我需要屏蔽一个数据类型为BIGING的字段。但是当我尝试使用regexp_replace执行查询时,我遇到了以下错误行:SQLCODE= -420,SQLSTATE=22018。有没有其他方法可以替代用于BIGING的regexp_replace?
多谢了!

wkyowqbh

wkyowqbh1#

您可以使用下一个代码(Oracle),将除开头和结尾以外的所有数字替换为零,从而对整数进行“掩码”:

select 
    N, -- source number
    FLOOR(N/POWER(10, FLOOR(LOG(10, N)))) * POWER(10, FLOOR(LOG(10, N))) + MOD(N, 10) MASKED
from a;

run sql online

lokaqttq

lokaqttq2#

根据Db2的平台和版本,您可能会考虑使用CREATE MASK(如果可用)。这将确保数据始终被屏蔽,而无需在每个应用程序中都这样做。
快速搜索似乎表明Oracle也有类似的支持,但他们称之为Redaction。Oracle中的掩码似乎与子集化和将数据从生产导出到DEV/TEST有关。
您真的需要一个同时适用于两个RDBM的解决方案吗?
如果你真的想自己滚动,你需要提供一些你想返回的屏蔽值的例子。

编辑

以下是代码的一部分。PK_PERSON的数据类型为BIGINT。更新人员。T_PERSON集合PK_PERSON = REGEXP_REPLACE(PK_PERSON,'[0-9]','*'),其中PK_PERSON在('117888')中
这是行不通的,你不能将BIGINT列设置为字符串。屏蔽也不是这样工作的。屏蔽通常是指从DB中读取数据时发生的过程。

相关问题